You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by cc...@apache.org on 2010/08/13 16:30:26 UTC

svn commit: r985209 [1/11] - in /incubator/deltacloud/trunk/site: ./ Scripts/ css/ css/blueprint/ css/blueprint/plugins/ css/blueprint/plugins/buttons/ css/blueprint/plugins/buttons/icons/ css/blueprint/plugins/fancy-type/ css/blueprint/plugins/link-ic...

Author: cctrieloff
Date: Fri Aug 13 14:30:21 2010
New Revision: 985209

URL: http://svn.apache.org/viewvc?rev=985209&view=rev
Log:
Initial site checkin from mfojtik

Added:
    incubator/deltacloud/trunk/site/
    incubator/deltacloud/trunk/site/Clear_Skin_1.swf   (with props)
    incubator/deltacloud/trunk/site/FLVPlayer_Progressive.swf   (with props)
    incubator/deltacloud/trunk/site/Scripts/
    incubator/deltacloud/trunk/site/Scripts/expressInstall.swf   (with props)
    incubator/deltacloud/trunk/site/Scripts/swfobject_modified.js
    incubator/deltacloud/trunk/site/api.html
    incubator/deltacloud/trunk/site/client-ruby.html
    incubator/deltacloud/trunk/site/contribute.html
    incubator/deltacloud/trunk/site/css/
    incubator/deltacloud/trunk/site/css/blueprint/
    incubator/deltacloud/trunk/site/css/blueprint/ie.css
    incubator/deltacloud/trunk/site/css/blueprint/plugins/
    incubator/deltacloud/trunk/site/css/blueprint/plugins/buttons/
    incubator/deltacloud/trunk/site/css/blueprint/plugins/buttons/icons/
    incubator/deltacloud/trunk/site/css/blueprint/plugins/buttons/icons/cross.png   (with props)
    incubator/deltacloud/trunk/site/css/blueprint/plugins/buttons/icons/key.png   (with props)
    incubator/deltacloud/trunk/site/css/blueprint/plugins/buttons/icons/tick.png   (with props)
    incubator/deltacloud/trunk/site/css/blueprint/plugins/buttons/readme.txt
    incubator/deltacloud/trunk/site/css/blueprint/plugins/buttons/screen.css
    incubator/deltacloud/trunk/site/css/blueprint/plugins/fancy-type/
    incubator/deltacloud/trunk/site/css/blueprint/plugins/fancy-type/readme.txt
    incubator/deltacloud/trunk/site/css/blueprint/plugins/fancy-type/screen.css
    incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/
    incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/
    incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/doc.png   (with props)
    incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/email.png   (with props)
    incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/external.png   (with props)
    incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/feed.png   (with props)
    incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/im.png   (with props)
    incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/pdf.png   (with props)
    incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/visited.png   (with props)
    incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/xls.png   (with props)
    incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/readme.txt
    incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/screen.css
    incubator/deltacloud/trunk/site/css/blueprint/plugins/rtl/
    incubator/deltacloud/trunk/site/css/blueprint/plugins/rtl/readme.txt
    incubator/deltacloud/trunk/site/css/blueprint/plugins/rtl/screen.css
    incubator/deltacloud/trunk/site/css/blueprint/print.css
    incubator/deltacloud/trunk/site/css/blueprint/screen.css
    incubator/deltacloud/trunk/site/css/blueprint/src/
    incubator/deltacloud/trunk/site/css/blueprint/src/forms.css
    incubator/deltacloud/trunk/site/css/blueprint/src/grid.css
    incubator/deltacloud/trunk/site/css/blueprint/src/grid.png   (with props)
    incubator/deltacloud/trunk/site/css/blueprint/src/ie.css
    incubator/deltacloud/trunk/site/css/blueprint/src/print.css
    incubator/deltacloud/trunk/site/css/blueprint/src/reset.css
    incubator/deltacloud/trunk/site/css/blueprint/src/typography.css
    incubator/deltacloud/trunk/site/css/coderay.css
    incubator/deltacloud/trunk/site/css/site.css
    incubator/deltacloud/trunk/site/dcloud-demo.html
    incubator/deltacloud/trunk/site/dcloud.html
    incubator/deltacloud/trunk/site/doc/
    incubator/deltacloud/trunk/site/doc/DeltaCloud/
    incubator/deltacloud/trunk/site/doc/DeltaCloud.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/API/
    incubator/deltacloud/trunk/site/doc/DeltaCloud/API.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/API/HardwareProfile.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/API/Image.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/API/Instance.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/API/Realm.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/API/StorageSnapshot.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/API/StorageVolume.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/Documentation/
    incubator/deltacloud/trunk/site/doc/DeltaCloud/Documentation.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/Documentation/OperationParameter.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/HWP/
    incubator/deltacloud/trunk/site/doc/DeltaCloud/HWP.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/HWP/FloatProperty.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/HWP/Property.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/InstanceState/
    incubator/deltacloud/trunk/site/doc/DeltaCloud/InstanceState.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/InstanceState/State.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/InstanceState/Transition.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/
    incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/
    incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/Base.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/HardwareProfile.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/Image.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/Instance.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/Realm.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/StorageSnapshot.html
    incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/StorageVolume.html
    incubator/deltacloud/trunk/site/doc/String.html
    incubator/deltacloud/trunk/site/doc/class_list.html
    incubator/deltacloud/trunk/site/doc/css/
    incubator/deltacloud/trunk/site/doc/css/common.css
    incubator/deltacloud/trunk/site/doc/css/full_list.css
    incubator/deltacloud/trunk/site/doc/css/style.css
    incubator/deltacloud/trunk/site/doc/file.README.html
    incubator/deltacloud/trunk/site/doc/file_list.html
    incubator/deltacloud/trunk/site/doc/frames.html
    incubator/deltacloud/trunk/site/doc/index.html
    incubator/deltacloud/trunk/site/doc/js/
    incubator/deltacloud/trunk/site/doc/js/app.js
    incubator/deltacloud/trunk/site/doc/js/full_list.js
    incubator/deltacloud/trunk/site/doc/js/jquery.js
    incubator/deltacloud/trunk/site/doc/method_list.html
    incubator/deltacloud/trunk/site/doc/top-level-namespace.html
    incubator/deltacloud/trunk/site/documentation.html
    incubator/deltacloud/trunk/site/download.html
    incubator/deltacloud/trunk/site/drivers.html
    incubator/deltacloud/trunk/site/framework.html
    incubator/deltacloud/trunk/site/image-builder.html
    incubator/deltacloud/trunk/site/index.html
    incubator/deltacloud/trunk/site/jquery.fancybox/
    incubator/deltacloud/trunk/site/jquery.fancybox/blank.gif   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_close.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_loading.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_nav_left.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_nav_right.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_e.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_n.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_ne.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_nw.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_s.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_se.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_sw.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_w.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_title_left.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_title_main.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_title_over.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancy_title_right.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancybox-x.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancybox-y.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/fancybox.png   (with props)
    incubator/deltacloud/trunk/site/jquery.fancybox/jquery-1.3.2.min.js
    incubator/deltacloud/trunk/site/jquery.fancybox/jquery.easing-1.3.pack.js
    incubator/deltacloud/trunk/site/jquery.fancybox/jquery.fancybox-1.3.1.css
    incubator/deltacloud/trunk/site/jquery.fancybox/jquery.fancybox-1.3.1.pack.js
    incubator/deltacloud/trunk/site/styles/
    incubator/deltacloud/trunk/site/styles/backup/
    incubator/deltacloud/trunk/site/styles/backup/callout-bg.png   (with props)
    incubator/deltacloud/trunk/site/styles/backup/definition.png   (with props)
    incubator/deltacloud/trunk/site/styles/backup/introbg.png   (with props)
    incubator/deltacloud/trunk/site/styles/backup/introbg2.png   (with props)
    incubator/deltacloud/trunk/site/styles/backup/logo-banner.png   (with props)
    incubator/deltacloud/trunk/site/styles/backup/logo.png   (with props)
    incubator/deltacloud/trunk/site/styles/backup/navbarbg.png   (with props)
    incubator/deltacloud/trunk/site/styles/backup/topbar-bg.png   (with props)
    incubator/deltacloud/trunk/site/styles/backup/topbar-bg_2.png   (with props)
    incubator/deltacloud/trunk/site/styles/basic-relationships.png   (with props)
    incubator/deltacloud/trunk/site/styles/bullet.png   (with props)
    incubator/deltacloud/trunk/site/styles/colbg.png   (with props)
    incubator/deltacloud/trunk/site/styles/dcloud-soa-1.png   (with props)
    incubator/deltacloud/trunk/site/styles/dcloud.css
    incubator/deltacloud/trunk/site/styles/debug.css
    incubator/deltacloud/trunk/site/styles/default-debug.css
    incubator/deltacloud/trunk/site/styles/default.css
    incubator/deltacloud/trunk/site/styles/diagram-soa.png   (with props)
    incubator/deltacloud/trunk/site/styles/et_logo.png   (with props)
    incubator/deltacloud/trunk/site/styles/fade.png   (with props)
    incubator/deltacloud/trunk/site/styles/favicon.ico   (with props)
    incubator/deltacloud/trunk/site/styles/firstpage.css
    incubator/deltacloud/trunk/site/styles/footer_corner.png   (with props)
    incubator/deltacloud/trunk/site/styles/footer_pattern.png   (with props)
    incubator/deltacloud/trunk/site/styles/framework.png   (with props)
    incubator/deltacloud/trunk/site/styles/generic.css
    incubator/deltacloud/trunk/site/styles/introbg.png   (with props)
    incubator/deltacloud/trunk/site/styles/logo-wide.png   (with props)
    incubator/deltacloud/trunk/site/styles/logo.png   (with props)
    incubator/deltacloud/trunk/site/styles/navbarbg.png   (with props)
    incubator/deltacloud/trunk/site/styles/newsbullet.png   (with props)
    incubator/deltacloud/trunk/site/styles/subnav-bg.png   (with props)
    incubator/deltacloud/trunk/site/styles/subnav-pointer.png   (with props)
    incubator/deltacloud/trunk/site/styles/topbar-bg.png   (with props)
    incubator/deltacloud/trunk/site/styles/wikibar-bg.png   (with props)
    incubator/deltacloud/trunk/site/video/
    incubator/deltacloud/trunk/site/video/DCloud.png   (with props)
    incubator/deltacloud/trunk/site/video/DCloud300.png   (with props)
    incubator/deltacloud/trunk/site/video/DCloud_Demo.png   (with props)
    incubator/deltacloud/trunk/site/video/DCloud_Demo300.png   (with props)

Added: incubator/deltacloud/trunk/site/Clear_Skin_1.swf
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/site/Clear_Skin_1.swf?rev=985209&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/deltacloud/trunk/site/Clear_Skin_1.swf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/deltacloud/trunk/site/FLVPlayer_Progressive.swf
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/site/FLVPlayer_Progressive.swf?rev=985209&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/deltacloud/trunk/site/FLVPlayer_Progressive.swf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/deltacloud/trunk/site/Scripts/expressInstall.swf
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/site/Scripts/expressInstall.swf?rev=985209&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/deltacloud/trunk/site/Scripts/expressInstall.swf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/deltacloud/trunk/site/Scripts/swfobject_modified.js
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/site/Scripts/swfobject_modified.js?rev=985209&view=auto
==============================================================================
--- incubator/deltacloud/trunk/site/Scripts/swfobject_modified.js (added)
+++ incubator/deltacloud/trunk/site/Scripts/swfobject_modified.js Fri Aug 13 14:30:21 2010
@@ -0,0 +1,669 @@
+/*!    SWFObject v2.0 <http://code.google.com/p/swfobject/>
+       Copyright (c) 2007 Geoff Stearns, Michael Williams, and Bobby van der Sluis
+       This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
+*/
+
+var swfobject = function() {
+
+       var UNDEF = "undefined",
+               OBJECT = "object",
+               SHOCKWAVE_FLASH = "Shockwave Flash",
+               SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
+               FLASH_MIME_TYPE = "application/x-shockwave-flash",
+               EXPRESS_INSTALL_ID = "SWFObjectExprInst",
+
+               win = window,
+               doc = document,
+               nav = navigator,
+
+               domLoadFnArr = [],
+               regObjArr = [],
+               timer = null,
+               storedAltContent = null,
+               storedAltContentId = null,
+               isDomLoaded = false,
+               isExpressInstallActive = false;
+
+       /* Centralized function for browser feature detection
+               - Proprietary feature detection (conditional compiling) is used to detect Internet Explorer's features
+               - User agent string detection is only used when no alternative is possible
+               - Is executed directly for optimal performance
+       */
+       var ua = function() {
+               var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF && typeof doc.appendChild != UNDEF && typeof doc.replaceChild != UNDEF && typeof doc.removeChild != UNDEF && typeof doc.cloneNode != UNDEF,
+                       playerVersion = [0,0,0],
+                       d = null;
+               if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
+                       d = nav.plugins[SHOCKWAVE_FLASH].description;
+                       if (d) {
+                               d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
+                               playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
+                               playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
+                               playerVersion[2] = /r/.test(d) ? parseInt(d.replace(/^.*r(.*)$/, "$1"), 10) : 0;
+                       }
+               }
+               else if (typeof win.ActiveXObject != UNDEF) {
+                       var a = null, fp6Crash = false;
+                       try {
+                               a = new ActiveXObject(SHOCKWAVE_FLASH_AX + ".7");
+                       }
+                       catch(e) {
+                               try {
+                                       a = new ActiveXObject(SHOCKWAVE_FLASH_AX + ".6");
+                                       playerVersion = [6,0,21];
+                                       a.AllowScriptAccess = "always";  // Introduced in fp6.0.47
+                               }
+                               catch(e) {
+                                       if (playerVersion[0] == 6) {
+                                               fp6Crash = true;
+                                       }
+                               }
+                               if (!fp6Crash) {
+                                       try {
+                                               a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
+                                       }
+                                       catch(e) {}
+                               }
+                       }
+                       if (!fp6Crash && a) { // a will return null when ActiveX is disabled
+                               try {
+                                       d = a.GetVariable("$version");  // Will crash fp6.0.21/23/29
+                                       if (d) {
+                                               d = d.split(" ")[1].split(",");
+                                               playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
+                                       }
+                               }
+                               catch(e) {}
+                       }
+               }
+               var u = nav.userAgent.toLowerCase(),
+                       p = nav.platform.toLowerCase(),
+                       webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
+                       ie = false,
+                       windows = p ? /win/.test(p) : /win/.test(u),
+                       mac = p ? /mac/.test(p) : /mac/.test(u);
+               /*@cc_on
+                       ie = true;
+                       @if (@_win32)
+                               windows = true;
+                       @elif (@_mac)
+                               mac = true;
+                       @end
+               @*/
+               return { w3cdom:w3cdom, pv:playerVersion, webkit:webkit, ie:ie, win:windows, mac:mac };
+       }();
+
+       /* Cross-browser onDomLoad
+               - Based on Dean Edwards' solution: http://dean.edwards.name/weblog/2006/06/again/
+               - Will fire an event as soon as the DOM of a page is loaded (supported by Gecko based browsers - like Firefox -, IE, Opera9+, Safari)
+       */
+       var onDomLoad = function() {
+               if (!ua.w3cdom) {
+                       return;
+               }
+               addDomLoadEvent(main);
+               if (ua.ie && ua.win) {
+                       try {  // Avoid a possible Operation Aborted error
+                               doc.write("<scr" + "ipt id=__ie_ondomload defer=true src=//:></scr" + "ipt>"); // String is split into pieces to avoid Norton AV to add code that can cause errors
+                               var s = getElementById("__ie_ondomload");
+                               if (s) {
+                                       s.onreadystatechange = function() {
+                                               if (this.readyState == "complete") {
+                                                       this.parentNode.removeChild(this);
+                                                       callDomLoadFunctions();
+                                               }
+                                       };
+                               }
+                       }
+                       catch(e) {}
+               }
+               if (ua.webkit && typeof doc.readyState != UNDEF) {
+                       timer = setInterval(function() { if (/loaded|complete/.test(doc.readyState)) { callDomLoadFunctions(); }}, 10);
+               }
+               if (typeof doc.addEventListener != UNDEF) {
+                       doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, null);
+               }
+               addLoadEvent(callDomLoadFunctions);
+       }();
+
+       function callDomLoadFunctions() {
+               if (isDomLoaded) {
+                       return;
+               }
+               if (ua.ie && ua.win) { // Test if we can really add elements to the DOM; we don't want to fire it too early
+                       var s = createElement("span");
+                       try { // Avoid a possible Operation Aborted error
+                               var t = doc.getElementsByTagName("body")[0].appendChild(s);
+                               t.parentNode.removeChild(t);
+                       }
+                       catch (e) {
+                               return;
+                       }
+               }
+               isDomLoaded = true;
+               if (timer) {
+                       clearInterval(timer);
+                       timer = null;
+               }
+               var dl = domLoadFnArr.length;
+               for (var i = 0; i < dl; i++) {
+                       domLoadFnArr[i]();
+               }
+       }
+
+       function addDomLoadEvent(fn) {
+               if (isDomLoaded) {
+                       fn();
+               }
+               else {
+                       domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+
+               }
+       }
+
+       /* Cross-browser onload
+               - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/
+               - Will fire an event as soon as a web page including all of its assets are loaded
+        */
+       function addLoadEvent(fn) {
+               if (typeof win.addEventListener != UNDEF) {
+                       win.addEventListener("load", fn, false);
+               }
+               else if (typeof doc.addEventListener != UNDEF) {
+                       doc.addEventListener("load", fn, false);
+               }
+               else if (typeof win.attachEvent != UNDEF) {
+                       win.attachEvent("onload", fn);
+               }
+               else if (typeof win.onload == "function") {
+                       var fnOld = win.onload;
+                       win.onload = function() {
+                               fnOld();
+                               fn();
+                       };
+               }
+               else {
+                       win.onload = fn;
+               }
+       }
+
+       /* Main function
+               - Will preferably execute onDomLoad, otherwise onload (as a fallback)
+       */
+       function main() { // Static publishing only
+               var rl = regObjArr.length;
+               for (var i = 0; i < rl; i++) { // For each registered object element
+                       var id = regObjArr[i].id;
+                       if (ua.pv[0] > 0) {
+                               var obj = getElementById(id);
+                               if (obj) {
+                                       regObjArr[i].width = obj.getAttribute("width") ? obj.getAttribute("width") : "0";
+                                       regObjArr[i].height = obj.getAttribute("height") ? obj.getAttribute("height") : "0";
+                                       if (hasPlayerVersion(regObjArr[i].swfVersion)) { // Flash plug-in version >= Flash content version: Houston, we have a match!
+                                               if (ua.webkit && ua.webkit < 312) { // Older webkit engines ignore the object element's nested param elements
+                                                       fixParams(obj);
+                                               }
+                                               setVisibility(id, true);
+                                       }
+                                       else if (regObjArr[i].expressInstall && !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) { // Show the Adobe Express Install dialog if set by the web page author and if supported (fp6.0.65+ on Win/Mac OS only)
+                                               showExpressInstall(regObjArr[i]);
+                                       }
+                                       else { // Flash plug-in and Flash content version mismatch: display alternative content instead of Flash content
+                                               displayAltContent(obj);
+                                       }
+                               }
+                       }
+                       else {  // If no fp is installed, we let the object element do its job (show alternative content)
+                               setVisibility(id, true);
+                       }
+               }
+       }
+
+       /* Fix nested param elements, which are ignored by older webkit engines
+               - This includes Safari up to and including version 1.2.2 on Mac OS 10.3
+               - Fall back to the proprietary embed element
+       */
+       function fixParams(obj) {
+               var nestedObj = obj.getElementsByTagName(OBJECT)[0];
+               if (nestedObj) {
+                       var e = createElement("embed"), a = nestedObj.attributes;
+                       if (a) {
+                               var al = a.length;
+                               for (var i = 0; i < al; i++) {
+                                       if (a[i].nodeName.toLowerCase() == "data") {
+                                               e.setAttribute("src", a[i].nodeValue);
+                                       }
+                                       else {
+                                               e.setAttribute(a[i].nodeName, a[i].nodeValue);
+                                       }
+                               }
+                       }
+                       var c = nestedObj.childNodes;
+                       if (c) {
+                               var cl = c.length;
+                               for (var j = 0; j < cl; j++) {
+                                       if (c[j].nodeType == 1 && c[j].nodeName.toLowerCase() == "param") {
+                                               e.setAttribute(c[j].getAttribute("name"), c[j].getAttribute("value"));
+                                       }
+                               }
+                       }
+                       obj.parentNode.replaceChild(e, obj);
+               }
+       }
+
+       /* Fix hanging audio/video threads and force open sockets and NetConnections to disconnect
+               - Occurs when unloading a web page in IE using fp8+ and innerHTML/outerHTML
+               - Dynamic publishing only
+       */
+       function fixObjectLeaks(id) {
+               if (ua.ie && ua.win && hasPlayerVersion("8.0.0")) {
+                       win.attachEvent("onunload", function () {
+                               var obj = getElementById(id);
+                               if (obj) {
+                                       for (var i in obj) {
+                                               if (typeof obj[i] == "function") {
+                                                       obj[i] = function() {};
+                                               }
+                                       }
+                                       obj.parentNode.removeChild(obj);
+                               }
+                       });
+               }
+       }
+
+       /* Show the Adobe Express Install dialog
+               - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75
+       */
+       function showExpressInstall(regObj) {
+               isExpressInstallActive = true;
+               var obj = getElementById(regObj.id);
+               if (obj) {
+                       if (regObj.altContentId) {
+                               var ac = getElementById(regObj.altContentId);
+                               if (ac) {
+                                       storedAltContent = ac;
+                                       storedAltContentId = regObj.altContentId;
+                               }
+                       }
+                       else {
+                               storedAltContent = abstractAltContent(obj);
+                       }
+                       if (!(/%$/.test(regObj.width)) && parseInt(regObj.width, 10) < 310) {
+                               regObj.width = "310";
+                       }
+                       if (!(/%$/.test(regObj.height)) && parseInt(regObj.height, 10) < 137) {
+                               regObj.height = "137";
+                       }
+                       doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
+                       var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",
+                               dt = doc.title,
+                               fv = "MMredirectURL=" + win.location + "&MMplayerType=" + pt + "&MMdoctitle=" + dt,
+                               replaceId = regObj.id;
+                       // For IE when a SWF is loading (AND: not available in cache) wait for the onload event to fire to remove the original object element
+                       // In IE you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
+                       if (ua.ie && ua.win && obj.readyState != 4) {
+                               var newObj = createElement("div");
+                               replaceId += "SWFObjectNew";
+                               newObj.setAttribute("id", replaceId);
+                               obj.parentNode.insertBefore(newObj, obj); // Insert placeholder div that will be replaced by the object element that loads expressinstall.swf
+                               obj.style.display = "none";
+                               win.attachEvent("onload", function() { obj.parentNode.removeChild(obj); });
+                       }
+                       createSWF({ data:regObj.expressInstall, id:EXPRESS_INSTALL_ID, width:regObj.width, height:regObj.height }, { flashvars:fv }, replaceId);
+               }
+       }
+
+       /* Functions to abstract and display alternative content
+       */
+       function displayAltContent(obj) {
+               if (ua.ie && ua.win && obj.readyState != 4) {
+                       // For IE when a SWF is loading (AND: not available in cache) wait for the onload event to fire to remove the original object element
+                       // In IE you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
+                       var el = createElement("div");
+                       obj.parentNode.insertBefore(el, obj); // Insert placeholder div that will be replaced by the alternative content
+                       el.parentNode.replaceChild(abstractAltContent(obj), el);
+                       obj.style.display = "none";
+                       win.attachEvent("onload", function() { obj.parentNode.removeChild(obj); });
+               }
+               else {
+                       obj.parentNode.replaceChild(abstractAltContent(obj), obj);
+               }
+       }
+
+       function abstractAltContent(obj) {
+               var ac = createElement("div");
+               if (ua.win && ua.ie) {
+                       ac.innerHTML = obj.innerHTML;
+               }
+               else {
+                       var nestedObj = obj.getElementsByTagName(OBJECT)[0];
+                       if (nestedObj) {
+                               var c = nestedObj.childNodes;
+                               if (c) {
+                                       var cl = c.length;
+                                       for (var i = 0; i < cl; i++) {
+                                               if (!(c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "param") && !(c[i].nodeType == 8)) {
+                                                       ac.appendChild(c[i].cloneNode(true));
+                                               }
+                                       }
+                               }
+                       }
+               }
+               return ac;
+       }
+
+       /* Cross-browser dynamic SWF creation
+       */
+       function createSWF(attObj, parObj, id) {
+               var r, el = getElementById(id);
+               if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
+                       attObj.id = id;
+               }
+               if (ua.ie && ua.win) { // IE, the object element and W3C DOM methods do not combine: fall back to outerHTML
+                       var att = "";
+                       for (var i in attObj) {
+                               if (attObj[i] != Object.prototype[i]) { // Filter out prototype additions from other potential libraries, like Object.prototype.toJSONString = function() {}
+                                       if (i == "data") {
+                                               parObj.movie = attObj[i];
+                                       }
+                                       else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
+                                               att += ' class="' + attObj[i] + '"';
+                                       }
+                                       else if (i != "classid") {
+                                               att += ' ' + i + '="' + attObj[i] + '"';
+                                       }
+                               }
+                       }
+                       var par = "";
+                       for (var j in parObj) {
+                               if (parObj[j] != Object.prototype[j]) { // Filter out prototype additions from other potential libraries
+                                       par += '<param name="' + j + '" value="' + parObj[j] + '" />';
+                               }
+                       }
+                       el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
+                       fixObjectLeaks(attObj.id); // This bug affects dynamic publishing only
+                       r = getElementById(attObj.id);
+               }
+               else if (ua.webkit && ua.webkit < 312) { // Older webkit engines ignore the object element's nested param elements: fall back to the proprietary embed element
+                       var e = createElement("embed");
+                       e.setAttribute("type", FLASH_MIME_TYPE);
+                       for (var k in attObj) {
+                               if (attObj[k] != Object.prototype[k]) { // Filter out prototype additions from other potential libraries
+                                       if (k == "data") {
+                                               e.setAttribute("src", attObj[k]);
+                                       }
+                                       else if (k.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
+                                               e.setAttribute("class", attObj[k]);
+                                       }
+                                       else if (k != "classid") { // Filter out IE specific attribute
+                                               e.setAttribute(k, attObj[k]);
+                                       }
+                               }
+                       }
+                       for (var l in parObj) {
+                               if (parObj[l] != Object.prototype[l]) { // Filter out prototype additions from other potential libraries
+                                       if (l != "movie") { // Filter out IE specific param element
+                                               e.setAttribute(l, parObj[l]);
+                                       }
+                               }
+                       }
+                       el.parentNode.replaceChild(e, el);
+                       r = e;
+               }
+               else { // Well-behaving browsers
+                       var o = createElement(OBJECT);
+                       o.setAttribute("type", FLASH_MIME_TYPE);
+                       for (var m in attObj) {
+                               if (attObj[m] != Object.prototype[m]) { // Filter out prototype additions from other potential libraries
+                                       if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
+                                               o.setAttribute("class", attObj[m]);
+                                       }
+                                       else if (m != "classid") { // Filter out IE specific attribute
+                                               o.setAttribute(m, attObj[m]);
+                                       }
+                               }
+                       }
+                       for (var n in parObj) {
+                               if (parObj[n] != Object.prototype[n] && n != "movie") { // Filter out prototype additions from other potential libraries and IE specific param element
+                                       createObjParam(o, n, parObj[n]);
+                               }
+                       }
+                       el.parentNode.replaceChild(o, el);
+                       r = o;
+               }
+               return r;
+       }
+
+       function createObjParam(el, pName, pValue) {
+               var p = createElement("param");
+               p.setAttribute("name", pName);
+               p.setAttribute("value", pValue);
+               el.appendChild(p);
+       }
+
+       function getElementById(id) {
+               return doc.getElementById(id);
+       }
+
+       function createElement(el) {
+               return doc.createElement(el);
+       }
+
+       function hasPlayerVersion(rv) {
+               var pv = ua.pv, v = rv.split(".");
+               v[0] = parseInt(v[0], 10);
+               v[1] = parseInt(v[1], 10);
+               v[2] = parseInt(v[2], 10);
+               return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
+       }
+
+       /* Cross-browser dynamic CSS creation
+               - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php
+       */
+       function createCSS(sel, decl) {
+               if (ua.ie && ua.mac) {
+                       return;
+               }
+               var h = doc.getElementsByTagName("head")[0], s = createElement("style");
+               s.setAttribute("type", "text/css");
+               s.setAttribute("media", "screen");
+               if (!(ua.ie && ua.win) && typeof doc.createTextNode != UNDEF) {
+                       s.appendChild(doc.createTextNode(sel + " {" + decl + "}"));
+               }
+               h.appendChild(s);
+               if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {
+                       var ls = doc.styleSheets[doc.styleSheets.length - 1];
+                       if (typeof ls.addRule == OBJECT) {
+                               ls.addRule(sel, decl);
+                       }
+               }
+       }
+
+       function setVisibility(id, isVisible) {
+               var v = isVisible ? "visible" : "hidden";
+               if (isDomLoaded) {
+                       getElementById(id).style.visibility = v;
+               }
+               else {
+                       createCSS("#" + id, "visibility:" + v);
+               }
+       }
+
+       function getTargetVersion(obj) {
+           if (!obj)
+               return 0;
+               var c = obj.childNodes;
+               var cl = c.length;
+               for (var i = 0; i < cl; i++) {
+                       if (c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "object") {
+                           c = c[i].childNodes;
+                           cl = c.length;
+                           i = 0;
+                       }
+                       if (c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "param" && c[i].getAttribute("name") == "swfversion") {
+                          return c[i].getAttribute("value");
+                       }
+               }
+               return 0;
+       }
+
+       function getExpressInstall(obj) {
+           if (!obj)
+               return "";
+               var c = obj.childNodes;
+               var cl = c.length;
+               for (var i = 0; i < cl; i++) {
+                       if (c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "object") {
+                           c = c[i].childNodes;
+                           cl = c.length;
+                           i = 0;
+                       }
+                       if (c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "param" && c[i].getAttribute("name") == "expressinstall") {
+                           return c[i].getAttribute("value");
+                       }
+               }
+               return "";
+       }
+
+       return {
+               /* Public API
+                       - Reference: http://code.google.com/p/swfobject/wiki/SWFObject_2_0_documentation
+               */
+               registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr) {
+                       if (!ua.w3cdom || !objectIdStr) {
+                               return;
+                       }
+                       var obj = document.getElementById(objectIdStr);
+                       var xi = getExpressInstall(obj);
+                       var regObj = {};
+                       regObj.id = objectIdStr;
+                       regObj.swfVersion = swfVersionStr ? swfVersionStr : getTargetVersion(obj);
+                       regObj.expressInstall = xiSwfUrlStr ? xiSwfUrlStr : ((xi != "") ? xi : false);
+                       regObjArr[regObjArr.length] = regObj;
+                       setVisibility(objectIdStr, false);
+               },
+
+               getObjectById: function(objectIdStr) {
+                       var r = null;
+                       if (ua.w3cdom && isDomLoaded) {
+                               var o = getElementById(objectIdStr);
+                               if (o) {
+                                       var n = o.getElementsByTagName(OBJECT)[0];
+                                       if (!n || (n && typeof o.SetVariable != UNDEF)) {
+                                       r = o;
+                                       }
+                                       else if (typeof n.SetVariable != UNDEF) {
+                                               r = n;
+                                       }
+                               }
+                       }
+                       return r;
+               },
+
+               embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj) {
+                       if (!ua.w3cdom || !swfUrlStr || !replaceElemIdStr || !widthStr || !heightStr || !swfVersionStr) {
+                               return;
+                       }
+                       widthStr += ""; // Auto-convert to string to make it idiot proof
+                       heightStr += "";
+                       if (hasPlayerVersion(swfVersionStr)) {
+                               setVisibility(replaceElemIdStr, false);
+                               var att = (typeof attObj == OBJECT) ? attObj : {};
+                               att.data = swfUrlStr;
+                               att.width = widthStr;
+                               att.height = heightStr;
+                               var par = (typeof parObj == OBJECT) ? parObj : {};
+                               if (typeof flashvarsObj == OBJECT) {
+                                       for (var i in flashvarsObj) {
+                                               if (flashvarsObj[i] != Object.prototype[i]) { // Filter out prototype additions from other potential libraries
+                                                       if (typeof par.flashvars != UNDEF) {
+                                                               par.flashvars += "&" + i + "=" + flashvarsObj[i];
+                                                       }
+                                                       else {
+                                                               par.flashvars = i + "=" + flashvarsObj[i];
+                                                       }
+                                               }
+                                       }
+                               }
+                               addDomLoadEvent(function() {
+                                       createSWF(att, par, replaceElemIdStr);
+                                       if (att.id == replaceElemIdStr) {
+                                               setVisibility(replaceElemIdStr, true);
+                                       }
+                               });
+                       }
+                       else if (xiSwfUrlStr && !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) {
+                               setVisibility(replaceElemIdStr, false);
+                               addDomLoadEvent(function() {
+                                       var regObj = {};
+                                       regObj.id = regObj.altContentId = replaceElemIdStr;
+                                       regObj.width = widthStr;
+                                       regObj.height = heightStr;
+                                       regObj.expressInstall = xiSwfUrlStr;
+                                       showExpressInstall(regObj);
+                               });
+                       }
+               },
+
+               getFlashPlayerVersion: function() {
+                       return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
+               },
+
+               hasFlashPlayerVersion:hasPlayerVersion,
+
+               createSWF: function(attObj, parObj, replaceElemIdStr) {
+                       if (ua.w3cdom && isDomLoaded) {
+                               return createSWF(attObj, parObj, replaceElemIdStr);
+                       }
+                       else {
+                               return undefined;
+                       }
+               },
+
+               createCSS: function(sel, decl) {
+                       if (ua.w3cdom) {
+                               createCSS(sel, decl);
+                       }
+               },
+
+               addDomLoadEvent:addDomLoadEvent,
+
+               addLoadEvent:addLoadEvent,
+
+               getQueryParamValue: function(param) {
+                       var q = doc.location.search || doc.location.hash;
+                       if (param == null) {
+                               return q;
+                       }
+                       if(q) {
+                               var pairs = q.substring(1).split("&");
+                               for (var i = 0; i < pairs.length; i++) {
+                                       if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
+                                               return pairs[i].substring((pairs[i].indexOf("=") + 1));
+                                       }
+                               }
+                       }
+                       return "";
+               },
+
+               // For internal usage only
+               expressInstallCallback: function() {
+                       if (isExpressInstallActive && storedAltContent) {
+                               var obj = getElementById(EXPRESS_INSTALL_ID);
+                               if (obj) {
+                                       obj.parentNode.replaceChild(storedAltContent, obj);
+                                       if (storedAltContentId) {
+                                               setVisibility(storedAltContentId, true);
+                                               if (ua.ie && ua.win) {
+                                                       storedAltContent.style.display = "block";
+                                               }
+                                       }
+                                       storedAltContent = null;
+                                       storedAltContentId = null;
+                                       isExpressInstallActive = false;
+                               }
+                       }
+               }
+
+       };
+
+}();

Added: incubator/deltacloud/trunk/site/api.html
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/site/api.html?rev=985209&view=auto
==============================================================================
--- incubator/deltacloud/trunk/site/api.html (added)
+++ incubator/deltacloud/trunk/site/api.html Fri Aug 13 14:30:21 2010
@@ -0,0 +1,378 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+  <head>
+    <title>
+      Deltacloud - Documentation
+    </title>
+    <meta content='' name='keywords' />
+    <meta content='' name='description' />
+    <meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
+    <link href='./styles/favicon.ico' rel='shortcut icon' type='image/x-icon' />
+    <link href='./styles/default.css' rel='StyleSheet' title='Main style' type='text/css' />
+    <link href='./styles/default-debug.css' rel='Alternate StyleSheet' title='Debug main style' type='text/css' />
+  </head>
+  <body>
+    <div id='header'>
+      <div class='container'>
+        <div id='headerLogo' onclick="location.href='index.html';" style='cursor: pointer;'>
+          <h1>
+            Deltacloud - Many clouds. One API. No problem.
+          </h1>
+        </div>
+      </div>
+    </div>
+    <div id='navigation'>
+      <div class='container' id='menu'>
+        <ul class='l0'>
+          <li>
+            <a class='inactive' href='./index.html' title='Deltacloud Home'>Home</a>
+          </li>
+          <li>
+            <a class='inactive' href='./download.html' title='Get the latest releases'>Download</a>
+          </li>
+          <li>
+            <a class='inactive' href='./contribute.html' title='Information about design/development process'>Contribute</a>
+          </li>
+          <li>
+            <a class='active' href='./documentation.html' title='Project documentation'>Documentation</a>
+          </li>
+        </ul>
+      </div>
+    </div>
+    <div id='subnavigation'>
+      <div class='container' id='submenu'>
+        <ul class='l1'>
+          <li>
+            <a class='inactive' href='documentation.html'>
+              Overview
+            </a>
+          </li>
+          <li>
+            <a class='active' href='api.html'>
+              REST API
+            </a>
+          </li>
+          <li>
+            <a class='inactive' href='drivers.html'>
+              Drivers
+            </a>
+          </li>
+          <li>
+            <a class='inactive' href='framework.html'>
+              Framework
+            </a>
+          </li>
+          <li>
+            <a class='inactive' href='doc/index.html'>
+              Ruby Client API
+            </a>
+          </li>
+          <li>
+            <a class='inactive' href='client-ruby.html'>
+              Ruby Client
+            </a>
+          </li>
+        </ul>
+      </div>
+    </div>
+    <div id='frontpageHeader'></div>
+    <div id='main'>
+      <div class='container' id='content-deltacloud'>
+        <h1>Deltacloud API</h1>
+        <!-- - title, rest = page.split("</h1>") -->
+        <!-- = title + '</h1>' -->
+        <ul class="toc">
+        <li>
+        <a href="#h1">REST</a>
+        </li>
+        <li>
+        <a href="#h2">Authentication</a>
+        </li>
+        <li>
+        <a href="#h3">Primary Entry Point</a>
+        </li>
+        <li>
+        <a href="#h4">Resources</a>
+        <ul>
+        <li>
+        <a href="#h4_1">Hardware Profiles</a>
+        </li>
+        <li>
+        <a href="#h4_2">Realms</a>
+        </li>
+        <li>
+        <a href="#h4_3">Images</a>
+        </li>
+        <li>
+        <a href="#h4_4">Instances</a>
+        </li>
+        </ul></li></ul>
+        <!-- = rest -->
+        
+        
+        <p>The Deltacloud API is built as a service-based REST API. You do not
+        directly link a Deltacloud library into your program to use it.
+        Instead, a client speaks the Deltacloud API over HTTP to a server
+        which implements the REST interface.</p>
+        
+        <p>Since cloud providers use their own APIs instead of the Deltacloud
+        API, we provide a translation layer that makes it possible to use
+        Deltacloud with these providers.</p>
+        
+        <h2 id="h1">REST</h2>
+        
+        <p>The Deltacloud API is a <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">RESTful API</a>, using HATEOAS architectural
+        style. The API requires no client-side URL construction. Access is
+        based entirely off a single entry-point resource. This allows other
+        implementors to structure their URL space however they like.</p>
+        
+        <p>Additionally, the Deltacloud API uses <em>content negotiation</em> to
+        determine the format of the returned representation. As of the current
+        revision, the only required representation is XML. Clients wishing to
+        receive XML representations must specify the HTTP <code>Accept</code> header as
+        <code>application/xml</code>.</p>
+        
+        <h2 id="h2">Authentication</h2>
+        
+        <p>The Deltacloud API uses HTTP authentication methods for authenticating
+        a given client. There is no explicit <em>login</em> action required. If
+        authentication is required, an HTTP status of 401 will be returned to
+        challenge for credentials.</p>
+        
+        <h2 id="h3">Primary Entry Point</h2>
+        
+        <p>Any Deltacloud implementor <em>must</em> provide exactly one well-known URL
+        as an entry-point. For example, <code>http://fancycloudprovider.com/api</code>.</p>
+        
+        <p>The result of this entry-point is a set of entry-points into other
+        collections, such as <em>images</em>, <em>instances</em>, <em>hardware profiles</em> and
+        <em>realms</em>, among others.</p>
+        
+        <p>Each collection is defined by a <code>&lt;link&gt;</code> tag with an <code>href</code> attribute
+        which includes the fully-qualified URL to the collection (which <em>may</em>
+        exist on different servers) and a <code>rel</code> attribute to denote which
+        collection is being specified.</p>
+        
+        <pre><code>&lt;api driver='ec2' version='1.0'&gt;&#x000A;  &lt;link href='http://fancycloudprovider.com/api/hardware_profiles' rel='hardware_profiles' /&gt;&#x000A;  &lt;link href='http://fancycloudprovider.com/api/instance_states' rel='instance_states' /&gt;&#x000A;  &lt;link href='http://fancycloudprovider.com/api/realms' rel='realms' /&gt;&#x000A;  &lt;link href='http://fancycloudprovider.com/api/images' rel='images' /&gt;&#x000A;  &lt;link href='http://fancycloudprovider.com/api/instances' rel='instances' /&gt;&#x000A;&lt;/api&gt;&#x000A;</code></pre>
+        
+        <h2 id="h4">Resources</h2>
+        
+        <p>From the primary entry-point, a client may follow the URL provided for
+        a collection to retrieve the resources within that collection. The
+        collection representation will include the full representations of the
+        items within it, along with links to retrieve each item individually.</p>
+        
+        <p><img src="styles/basic-relationships.png" alt="Basic relationships" /></p>
+        
+        <h3 id="h4_1">Hardware Profiles</h3>
+        
+        <p>Within a cloud provider a <em>hardware profile</em> represents a
+        configuration of resources upon which a machine may be deployed. A
+        hardware profile defines aspects such as local disk storage, available
+        RAM, and architecture. A future revision of the Deltacloud API will
+        include more aspects, including number and speed of CPUs available.
+        Each provider is free to define as many (or as few) hardware profiles
+        as desired.</p>
+        
+        <pre><code>&lt;hardware_profiles&gt;&#x000A;  &lt;hardware_profile href='http://fancycloudprovider.com/api/hardware_profiles/m1-small' id='m1-small'&gt;&#x000A;    &lt;property kind='fixed' name='storage' unit='GB' value='160' /&gt;&#x000A;    &lt;property kind='fixed' name='architecture' unit='label' value='i386' /&gt;&#x000A;    &lt;property kind='fixed' name='cpu' unit='count' value='1' /&gt;&#x000A;    &lt;property kind='fixed' name='memory' unit='MB' value='1740.8' /&gt;&#x000A;  &lt;/hardware_profile&gt;&#x000A;</code></pre>
+        
+        <p>Each <code>&lt;hardware_profile&gt;</code> block shall contain an <code>href</code> attribute providing a
+        URL to manipulate a specific profile, along with property elements for each
+        attribute of the hardware.</p>
+        
+        <ul>
+        <li><strong><code>id</code></strong>            is a unique identifier for the profile</li>
+        <li><strong><code>property</code></strong>      describes each of the hardware aspects</li>
+        </ul>
+        
+        
+        <p>Properties have the following attributes:</p>
+        
+        <ul>
+        <li><strong><code>name</code></strong>          the type of the property: <em>e.g.</em> <code>memory</code> or <code>storage</code></li>
+        <li><strong><code>unit</code></strong>          the units in which the value is specified: <code>MB</code>, <code>GB</code>, <code>count</code> or <code>label</code></li>
+        <li><strong><code>value</code></strong>         the actual value of the property. It depends on the specified unit: <code>1024</code>, <code>2</code> on <code>x86_64</code></li>
+        <li><strong><code>kind</code></strong>          describes the values to chose from.
+        
+        <ul>
+        <li><strong><code>fixed</code></strong>         only the value specified in the property is available</li>
+        <li><strong><code>enum</code></strong>          a list of available values is provided</li>
+        <li><strong><code>range</code></strong>         available values are described by a numeric range</li>
+        </ul>
+        </li>
+        </ul>
+        
+        
+        <p>When the <code>kind</code> is either an <code>enum</code> or a <code>range</code>, there must be two additional elements specified. One
+        that specifies the allowed values and the second with a way of picking a value.</p>
+        
+        <p>In the non-fixed case, the <code>value</code> property attribute specifies the default value.</p>
+        
+        <pre><code>  &lt;hardware_profile href='http://fancycloudprovider.com/api/hardware_profiles/m1-xlarge' id='m1-xlarge'&gt;&#x000A;    &lt;property kind='enum' name='storage' unit='GB' value='1024'&gt;&#x000A;      &lt;param href='http://fancycloudprovider.com/api/instances' method='post' name='hwp_storage' operation='create' /&gt;&#x000A;      &lt;enum&gt;&#x000A;        &lt;entry value='1024' /&gt;&#x000A;        &lt;entry value='2048' /&gt;&#x000A;        &lt;entry value='4096' /&gt;&#x000A;      &lt;/enum&gt;&#x000A;    &lt;/property&gt;&#x000A;    &lt;property kind='fixed' name='architecture' unit='label' value='x86_64' /&gt;&#x000A;    &lt;property kind='fixed' name='cpu' unit='count' value='4' /&gt;&#x000A;    &lt;property kind='range' name='memory' unit='MB' value='12288'&gt;&#x000A;      &lt;param href='http://fancycloudprovider.com/api/instances' method='post' name='hwp_memory' operation='create' /&gt;&#x000A;      &lt;range first='12288' last='32768' /&gt;&#
 x000A;    &lt;/property&gt;&#x000A;  &lt;/hardware_profile&gt;&#x000A;&lt;/hardware_profiles&gt;&#x000A;</code></pre>
+        
+        <p>At this time, hardware profile resources are immutable and read-only. In a
+        future revision they may be mutable.</p>
+        
+        <h3 id="h4_2">Realms</h3>
+        
+        <p>Within a cloud provider a <em>realm</em> represents a boundary containing
+        resources. The exact definition of a realm is left to the cloud
+        provider. In some cases, a realm may represent different datacenters,
+        different continents, or different pools of resources within a single
+        datacenter. A cloud provider may insist that resources must all exist
+        within a single realm in order to cooperate. For instance, storage
+        volumes may only be allowed to be mounted to instances within the same
+        realm.</p>
+        
+        <pre><code>&lt;realms&gt;&#x000A;  &lt;realm href="http://fancycloudprovider.com/api/realms/us" id='us'&gt;&#x000A;    &lt;name&gt;United States&lt;/name&gt;&#x000A;    &lt;state&gt;AVAILABLE&lt;/state&gt;&#x000A;    &lt;limit/&gt;&#x000A;  &lt;/realm&gt;&#x000A;  &lt;realm href="http://fancycloudprovider.com/api/realms/eu" id='eu'&gt;&#x000A;    &lt;name&gt;Europe&lt;/name&gt;&#x000A;    &lt;state&gt;AVAILABLE&lt;/state&gt;&#x000A;    &lt;limit/&gt;&#x000A;  &lt;/realm&gt;&#x000A;&lt;/realms&gt;&#x000A;</code></pre>
+        
+        <p>Each <code>&lt;realm&gt;</code> block shall contain an <code>href</code> attribute providing a URL
+        to manipulate a specific realm, along with elements for each attribute
+        of a realm.</p>
+        
+        <ul>
+        <li><strong><code>id</code></strong>          A unique identifier for the realm</li>
+        <li><strong><code>name</code></strong>        A short label</li>
+        <li><strong><code>state</code></strong>       Indicator of the current state of a realm
+        
+        <ul>
+        <li>AVAILABLE</li>
+        <li>UNAVAILABLE</li>
+        </ul>
+        </li>
+        <li><strong><code>limit</code></strong>       Limits applicable for the <em>current requester</em></li>
+        </ul>
+        
+        
+        <h3 id="h4_3">Images</h3>
+        
+        <p>An <em>image</em> is a platonic form of a machine. Images are not directly
+        executable, but are a template for creating actual instances of
+        machines.</p>
+        
+        <p>The instances collection will return a set of all images available to
+        the current user.</p>
+        
+        <pre><code>&lt;images&gt;&#x000A;  &lt;image href="http://fancycloudprovider.com/api/images/img1" id='img1'&gt;&#x000A;    &lt;owner_id&gt;fedoraproject&lt;/owner_id&gt;&#x000A;    &lt;name&gt;Fedora 10&lt;/name&gt;&#x000A;    &lt;description&gt;Fedora 10&lt;/description&gt;&#x000A;    &lt;architecture&gt;x86_64&lt;/architecture&gt;&#x000A;  &lt;/image&gt;&#x000A;  &lt;image href="http://fancycloudprovider.com/api/images/img2" id='img2'&gt;&#x000A;    &lt;owner_id&gt;fedoraproject&lt;/owner_id&gt;&#x000A;    &lt;name&gt;Fedora 10&lt;/name&gt;&#x000A;    &lt;description&gt;Fedora 10&lt;/description&gt;&#x000A;    &lt;architecture&gt;i386&lt;/architecture&gt;&#x000A;  &lt;/image&gt;&#x000A;  &lt;image href="http://fancycloudprovider.com/api/images/img3" id='img3'&gt;&#x000A;    &lt;owner_id&gt;ted&lt;/owner_id&gt;&#x000A;    &lt;name&gt;JBoss&lt;/name&gt;&#x000A;    &lt;description&gt;JBoss&lt;/description&gt;&#x000A;    &lt;architecture&gt;i386&lt;/architecture&gt;&#x
 000A;  &lt;/image&gt;&#x000A;&lt;/images&gt;&#x000A;</code></pre>
+        
+        <p>Each <code>&lt;image&gt;</code> block <em>shall</em> contain an <code>href</code> attribute providing a
+        URL to manipulate a specific image, along with elements for each
+        attribute of an image. Each element, including those for optional
+        attributes must be present. Optional attributes may be specified as a
+        element with empty content.</p>
+        
+        <p>These attributes include</p>
+        
+        <ul>
+        <li><strong><code>id</code></strong>            A unique identifier for the image</li>
+        <li><strong><code>owner_id</code></strong>      An opaque identifier which indicates the owner of an image</li>
+        <li><strong><code>name</code></strong>          An <em>optional</em> short label describing the image</li>
+        <li><strong><code>description</code></strong>   An <em>optional</em> description describing the image more fully</li>
+        <li><strong><code>architecture</code></strong>  A description of the machine architecture of the image
+        which may contain values such as:
+        
+        <ul>
+        <li><code>i386</code></li>
+        <li><code>x86_64</code></li>
+        </ul>
+        </li>
+        </ul>
+        
+        
+        <p>At this time, image resources are immutable and read-only.  In a future revision
+        they will be mutable.</p>
+        
+        <h3 id="h4_4">Instances</h3>
+        
+        <p>An <em>instance</em> is a concrete machine realized from an <em>image</em>. The
+        images collection may be obtained by following the link from the
+        primary entry-point.</p>
+        
+        <pre><code>&lt;instances&gt;&#x000A;  &lt;instance href="http://fancycloudprovider.com/api/instances/inst1" id='inst1'&gt;&#x000A;    &lt;owner_id&gt;larry&lt;/owner_id&gt;&#x000A;    &lt;name&gt;Production JBoss Instance&lt;/name&gt;&#x000A;    &lt;image href="http://fancycloudprovider.com/api/images/img3"/&gt;&#x000A;    &lt;hardware_profile href="http://fancycloudprovider.com/api/hardware_profiles/m1-small"/&gt;&#x000A;    &lt;realm href="http://fancycloudprovider.com/api/realms/us"/&gt;&#x000A;&#x000A;    &lt;state&gt;RUNNING&lt;/state&gt;&#x000A;    &lt;actions&gt;&#x000A;      &lt;link rel="reboot" href="http://fancycloudprovider.com/api/instances/inst1/reboot"/&gt;&#x000A;      &lt;link rel="stop" href="http://fancycloudprovider.com/api/instances/inst1/stop"/&gt;&#x000A;    &lt;/actions&gt;&#x000A;    &lt;public_addresses&gt;&#x000A;      &lt;address&gt;inst1.larry.fancycloudprovider.com&lt;/address&gt;&#x000A;    &lt;/public_addresses&gt;&#x000A;&#x000A;    &
 lt;private_addresses&gt;&#x000A;      &lt;address&gt;inst1.larry.internal&lt;/address&gt;&#x000A;    &lt;/private_addresses&gt;&#x000A;  &lt;/instance&gt;&#x000A;&lt;/instances&gt;&#x000A;</code></pre>
+        
+        <p>Each <code>&lt;instance&gt;</code> block shall contain an href attribute providing a
+        URL to manipulate a specific instance, along with elements for each
+        attribute of an instance. Each element, including those for optional
+        attributes must be present. Optional attributes may be specified as a
+        element with empty content.</p>
+        
+        <p>Simple attributes include</p>
+        
+        <ul>
+        <li><strong><code>id</code></strong>           A unique identifier for the instance</li>
+        <li><strong><code>owner_id</code></strong>     An opaque identifier which indicates the owner of an instance</li>
+        <li><strong><code>name</code></strong>         An <em>optional</em> short label describing the instance</li>
+        <li><strong><code>image</code></strong>        Provides a link to the platonic image from which the instance is based</li>
+        <li><strong><code>hardware_profile</code></strong>       Provides a link to the hardware profile in use by the instance</li>
+        <li><strong><code>realm</code></strong>        Provides a link to the realm where the instance is deployed</li>
+        <li><strong><code>state</code></strong>        Indicator of the instance's current state
+        
+        <ul>
+        <li><code>PENDING</code></li>
+        <li><code>STOPPED</code></li>
+        <li><code>RUNNING</code></li>
+        </ul>
+        </li>
+        </ul>
+        
+        
+        <p>Multiple-valued attributes include</p>
+        
+        <ul>
+        <li><strong><code>public_addresses</code></strong>  Publicly routable IP addresses or names for the instance</li>
+        <li><strong><code>private_addresses</code></strong>  Private network IP addresses or names for the instance</li>
+        </ul>
+        
+        
+        <p>In addition to the abovementioned attributes, each <code>&lt;instance&gt;</code> may contain an
+        <code>&lt;actions&gt;</code> block specifying valid actions for the instance, along with the URL
+        which may be used to perform the action.  Each action is specified by a <code>&lt;link&gt;</code>
+        with an <code>href</code> attribute providing the URL, and a <code>rel</code> attribute providing
+        a key to determine what the action will do.</p>
+        
+        <p>Representative actions include</p>
+        
+        <ul>
+        <li><code>reboot</code></li>
+        <li><code>start</code></li>
+        <li><code>stop</code></li>
+        </ul>
+        
+        
+        <p>Not all actions may be valid at all times for all instances. To invoke
+        an action, a client must perform an HTTP <code>POST</code> to the URL indicated.</p>
+        
+        <h4>Creating a new Instance</h4>
+        
+        <p>Per usual REST architectural style, new instances are created by
+        issuing an HTTP <code>POST</code> to the instances collection as defined through
+        the primary entry-point URL. Data should be sent in
+        <code>application/x-www-form-urlencoded</code> format.</p>
+        
+        <p>To create a new instance, only one parameter is required</p>
+        
+        <ul>
+        <li><strong><code>image_id</code></strong>   The identifier (not URL) of the image from which to base the instance</li>
+        </ul>
+        
+        
+        <p>Optional parameters may also be provided</p>
+        
+        <ul>
+        <li><strong><code>realm_id</code></strong>   The realm in which to launch the instance</li>
+        <li><strong><code>hwp_name</code></strong>  The hardware profile upon which to launch the instance</li>
+        <li><strong><code>name</code></strong>       A short label to identify the instance</li>
+        </ul>
+        
+        
+        <p>If <code>realm_id</code> or <code>hwp_name</code> are not specified, the provider <em>must</em>
+        select reasonable defaults. The architecture of the selected harware profile
+        <em>must</em> match the architecture of the specified image.</p>
+        
+        <p>After <code>POST</code>ing the data, the server <em>shall</em> return a representation
+        of the newly-created instance's XML, including a URL to retrieve the
+        instance in the future.</p>
+      </div>
+    </div>
+  </body>
+</html>

Added: incubator/deltacloud/trunk/site/client-ruby.html
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/site/client-ruby.html?rev=985209&view=auto
==============================================================================
--- incubator/deltacloud/trunk/site/client-ruby.html (added)
+++ incubator/deltacloud/trunk/site/client-ruby.html Fri Aug 13 14:30:21 2010
@@ -0,0 +1,226 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+  <head>
+    <title>
+      Deltacloud - Documentation
+    </title>
+    <meta content='' name='keywords' />
+    <meta content='' name='description' />
+    <meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
+    <link href='./styles/favicon.ico' rel='shortcut icon' type='image/x-icon' />
+    <link href='./styles/default.css' rel='StyleSheet' title='Main style' type='text/css' />
+    <link href='./styles/default-debug.css' rel='Alternate StyleSheet' title='Debug main style' type='text/css' />
+  </head>
+  <body>
+    <div id='header'>
+      <div class='container'>
+        <div id='headerLogo' onclick="location.href='index.html';" style='cursor: pointer;'>
+          <h1>
+            Deltacloud - Many clouds. One API. No problem.
+          </h1>
+        </div>
+      </div>
+    </div>
+    <div id='navigation'>
+      <div class='container' id='menu'>
+        <ul class='l0'>
+          <li>
+            <a class='inactive' href='./index.html' title='Deltacloud Home'>Home</a>
+          </li>
+          <li>
+            <a class='inactive' href='./download.html' title='Get the latest releases'>Download</a>
+          </li>
+          <li>
+            <a class='inactive' href='./contribute.html' title='Information about design/development process'>Contribute</a>
+          </li>
+          <li>
+            <a class='active' href='./documentation.html' title='Project documentation'>Documentation</a>
+          </li>
+        </ul>
+      </div>
+    </div>
+    <div id='subnavigation'>
+      <div class='container' id='submenu'>
+        <ul class='l1'>
+          <li>
+            <a class='inactive' href='documentation.html'>
+              Overview
+            </a>
+          </li>
+          <li>
+            <a class='inactive' href='api.html'>
+              REST API
+            </a>
+          </li>
+          <li>
+            <a class='inactive' href='drivers.html'>
+              Drivers
+            </a>
+          </li>
+          <li>
+            <a class='inactive' href='framework.html'>
+              Framework
+            </a>
+          </li>
+          <li>
+            <a class='inactive' href='doc/index.html'>
+              Ruby Client API
+            </a>
+          </li>
+          <li>
+            <a class='active' href='client-ruby.html'>
+              Ruby Client
+            </a>
+          </li>
+        </ul>
+      </div>
+    </div>
+    <div id='frontpageHeader'></div>
+    <div id='main'>
+      <div class='container' id='content-deltacloud'>
+        <h1>Deltacloud Client (Ruby)</h1>
+        <!-- - title, rest = page.split("</h1>") -->
+        <!-- = title + '</h1>' -->
+        <ul class="toc">
+        <li>
+        <a href="#h1">Basics</a>
+        </li>
+        <li>
+        <a href="#h2">Connecting to a Deltacloud provider</a>
+        </li>
+        <li>
+        <a href="#h3">Listing realms</a>
+        </li>
+        <li>
+        <a href="#h4">Listing hardware profiles</a>
+        </li>
+        <li>
+        <a href="#h5">Listing images</a>
+        </li>
+        <li>
+        <a href="#h6">Listing instances</a>
+        </li>
+        <li>
+        <a href="#h7">Launching instances</a>
+        </li>
+        <li>
+        <a href="#h8">Manipulating instances</a>
+        </li>
+        </ul>
+        <!-- = rest -->
+        
+        
+        <p>The Deltacloud project includes a Ruby client.  Other language-bindings
+        are possible and will be supported soon.  The client aims to insulate
+        users from having to deal with HTTP and REST directly.</p>
+        
+        <p>Each resource type has an associated model to ease usage.  Where
+        resource reference other resources, natural navigation across the
+        object model is possible.</p>
+        
+        <p>For example</p>
+        
+        <pre><code>puts instance.image.name&#x000A;puts instance.hardware_profile.architecture&#x000A;</code></pre>
+        
+        <h2 id="h1">Basics</h2>
+        
+        <p>To use the client, you must require <code>deltacloud</code>.</p>
+        
+        <pre><code>require 'deltacloud'&#x000A;</code></pre>
+        
+        <h2 id="h2">Connecting to a Deltacloud provider</h2>
+        
+        <pre><code>require 'deltacloud'&#x000A;&#x000A;api_url      = 'http://localhost:3001/api'&#x000A;api_name     = 'mockuser'&#x000A;api_password = 'mockpassword'&#x000A;&#x000A;client = DeltaCloud.new( api_name, api_password, api_url )&#x000A;&#x000A;# work with client here&#x000A;</code></pre>
+        
+        <p>In addition to creating a client, operations may occur within a block
+        included on the initialization</p>
+        
+        <pre><code>DeltaCloud.new( api_name, api_password, api_url ) do |client|&#x000A;  # work with client here&#x000A;end&#x000A;</code></pre>
+        
+        <p>In the event of a failure, any underlying HTTP transport exceptions
+        will be thrown all the way out to the caller.</p>
+        
+        <h2 id="h3">Listing realms</h2>
+        
+        <p>You may retrieve a complete list of realms available to you</p>
+        
+        <pre><code>realms = client.realms&#x000A;</code></pre>
+        
+        <p>You may retrieve a specific realm by its identifier</p>
+        
+        <pre><code>realm = client.realm( 'us' )&#x000A;</code></pre>
+        
+        <h2 id="h4">Listing hardware profiles</h2>
+        
+        <p>You may retrieve a complete list of hardware profiles available for launching
+        machines</p>
+        
+        <pre><code>hwp = client.hardware_profiles&#x000A;</code></pre>
+        
+        <p>You may filter hardware profiles by architecture</p>
+        
+        <pre><code>hardware_profiles = client.hardware_profiles( :architecture=&gt;'x86_64' )&#x000A;</code></pre>
+        
+        <p>You may retrieve a specific hardware profile by its identifier</p>
+        
+        <pre><code>hardware_profile = client.hardware_profile( 'm1-small' )&#x000A;</code></pre>
+        
+        <h2 id="h5">Listing images</h2>
+        
+        <p>You may retrieve a complete list of images</p>
+        
+        <pre><code>images = client.images&#x000A;</code></pre>
+        
+        <p>You may retrieve a list of images owned by the currently authenticated
+        user</p>
+        
+        <pre><code>images = client.images( :owner_id=&gt;:self )&#x000A;</code></pre>
+        
+        <p>You may retrieve a list of images visible to you but owned by a specific
+        user</p>
+        
+        <pre><code>images = client.images( :owner_id=&gt;'daryll' )&#x000A;</code></pre>
+        
+        <p>You may retrieve a specific image by its identifier</p>
+        
+        <pre><code>image = client.image( 'ami-8675309' )&#x000A;</code></pre>
+        
+        <h2 id="h6">Listing instances</h2>
+        
+        <p>You may retrieve a list of all instances visible to you</p>
+        
+        <pre><code>instances = client.instances&#x000A;</code></pre>
+        
+        <p>You may retrieve a specific instance by its identifier</p>
+        
+        <pre><code>instance = client.instance( 'i-90125' )&#x000A;</code></pre>
+        
+        <h2 id="h7">Launching instances</h2>
+        
+        <p>An instance may be launched using just an image identifier</p>
+        
+        <pre><code>image = client.image( 'ami-8675309' )&#x000A;instance = client.create_instance( image.id )&#x000A;</code></pre>
+        
+        <p>Optionally, a hardware profile or a realm may be specified</p>
+        
+        <pre><code>instance = client.create_instance( image.id, :hardware_profile=&gt;'m1-small', :realm=&gt;'us' )&#x000A;</code></pre>
+        
+        <h2 id="h8">Manipulating instances</h2>
+        
+        <p>Given an instance, depending on its state, various actions <em>may</em> be available.</p>
+        
+        <p>To determine what's available, the <code>instance#actions</code> method may be used.</p>
+        
+        <pre><code>instance.actions # [ 'reboot', 'stop' ]&#x000A;</code></pre>
+        
+        <p>For a valid action, the method matching the action with an exclamation point may be called.</p>
+        
+        <pre><code>instance.reboot!&#x000A;</code></pre>
+        
+        <p>Upon invoking an action, the instance will refresh its contents, in case the state has changed.
+        To determine later if the state has changed again, the instance must be refetched using
+        the <code>client.instance(...)</code> method.</p>
+      </div>
+    </div>
+  </body>
+</html>

Added: incubator/deltacloud/trunk/site/contribute.html
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/site/contribute.html?rev=985209&view=auto
==============================================================================
--- incubator/deltacloud/trunk/site/contribute.html (added)
+++ incubator/deltacloud/trunk/site/contribute.html Fri Aug 13 14:30:21 2010
@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+  <head>
+    <title>
+      Deltacloud - Contribute
+    </title>
+    <meta content='' name='keywords' />
+    <meta content='' name='description' />
+    <meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
+    <link href='./styles/favicon.ico' rel='shortcut icon' type='image/x-icon' />
+    <link href='./styles/default.css' rel='StyleSheet' title='Main style' type='text/css' />
+    <link href='./styles/default-debug.css' rel='Alternate StyleSheet' title='Debug main style' type='text/css' />
+  </head>
+  <body>
+    <div id='header'>
+      <div class='container'>
+        <div id='headerLogo' onclick="location.href='index.html';" style='cursor: pointer;'>
+          <h1>
+            Deltacloud - Many clouds. One API. No problem.
+          </h1>
+        </div>
+      </div>
+    </div>
+    <div id='navigation'>
+      <div class='container' id='menu'>
+        <ul class='l0'>
+          <li>
+            <a class='inactive' href='./index.html' title='Deltacloud Home'>Home</a>
+          </li>
+          <li>
+            <a class='inactive' href='./download.html' title='Get the latest releases'>Download</a>
+          </li>
+          <li>
+            <a class='active' href='./contribute.html' title='Information about design/development process'>Contribute</a>
+          </li>
+          <li>
+            <a class='inactive' href='./documentation.html' title='Project documentation'>Documentation</a>
+          </li>
+        </ul>
+      </div>
+    </div>
+    <div id='frontpageHeader'></div>
+    <div id='main'>
+      <div class='container' id='content-deltacloud'>
+        <h1>Help make Deltacloud better</h1>
+        <ul class="toc">
+        <li>
+        <a href="#h1">Getting the sources</a>
+        </li>
+        <li>
+        <a href="#h2">Required packages</a>
+        </li>
+        <li>
+        <a href="#h3">Installing the Deltacloud Core</a>
+        </li>
+        </ul>
+        <p>All development of Deltacloud takes place in the open. Communication is run through the mailing list and all source code changes are tracked publicly.</p>
+        <ul>
+          <li>
+            <strong>Mailing Lists</strong>
+            <br />
+            <p>For Deltacloud API: <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#x3a;&#100;&#101;&#x6c;&#x74;&#97;&#x63;&#108;&#111;&#x75;&#100;&#x2d;&#100;&#101;&#x76;&#x40;&#x69;&#x6e;&#x63;&#x75;&#98;&#x61;&#116;&#x6f;&#114;&#x2e;&#x61;&#x70;&#x61;&#99;&#x68;&#101;&#46;&#111;&#x72;&#x67;">&#100;&#x65;&#x6c;&#x74;&#97;&#x63;&#108;&#111;&#x75;&#100;&#x2d;&#x64;&#x65;&#118;&#64;&#105;&#110;&#x63;&#x75;&#98;&#97;&#x74;&#x6f;&#x72;&#x2e;&#x61;&#112;&#x61;&#x63;&#x68;&#101;&#x2e;&#111;&#x72;&#103;</a>.
+            To subscribe to it, send an email to <a href="&#x6d;&#x61;&#x69;&#x6c;&#116;&#x6f;&#x3a;&#x64;&#101;&#x6c;&#116;&#97;&#x63;&#x6c;&#111;&#117;&#x64;&#x2d;&#x64;&#101;&#118;&#45;&#115;&#x75;&#x62;&#115;&#x63;&#x72;&#105;&#98;&#x65;&#x40;&#x69;&#110;&#x63;&#117;&#x62;&#97;&#x74;&#111;&#x72;&#x2e;&#97;&#x70;&#97;&#99;&#x68;&#x65;&#x2e;&#111;&#114;&#x67;">&#x64;&#101;&#108;&#116;&#97;&#x63;&#x6c;&#x6f;&#117;&#x64;&#45;&#x64;&#x65;&#x76;&#x2d;&#x73;&#x75;&#x62;&#x73;&#x63;&#114;&#x69;&#98;&#x65;&#64;&#x69;&#110;&#x63;&#x75;&#98;&#x61;&#116;&#x6f;&#x72;&#x2e;&#x61;&#x70;&#97;&#99;&#x68;&#x65;&#x2e;&#111;&#x72;&#103;</a>.
+            You can also view <a href="http://mail-archives.apache.org/mod_mbox/incubator-deltacloud-dev/">Archive</a> in case you are missing something.</p>
+          </li>
+          <li>
+            <strong>IRC</strong>
+            <br />
+            <p>You can also join us on the Freenode IRC channel #deltacloud. Deltacloud developers are generally available on the IRC channel</p>
+          </li>
+          <li>
+            <strong>Bugs</strong>
+            <br />
+            <p>We track bugs in <a href="https://issues.apache.org/jira/browse/DTACLOUD">Apache JIRA</a>. You can [view open bugs][view-bugs] or <a href="https://issues.apache.org/jira/secure/CreateIssue!default.jspa">file a new one</a> there.</p>
+          </li>
+          <li>
+            <strong>Patches</strong>
+            <br />
+            <p>Patches are very welcome. Please send them to the <a href="http://mail-archives.apache.org/mod_mbox/incubator-deltacloud-dev/">development list</a>. Patches should be generated with <a href="http://kernel.org/pub/software/scm/git/docs/git-format-patch.html"><code>git</code>&nbsp;<code>format-patch</code></a> and sent to the list with <a href="http://kernel.org/pub/software/scm/git/docs/git-send-email.html"><code>git</code>&nbsp;<code>send-email</code></a>.</p>
+          </li>
+        </ul>
+        <h2 id="h1">Getting the sources</h2>
+        
+        <p>Then Deltacloud Core gives you the API and drivers to various cloud providers.
+        It also provides a client library and a commandline interface.</p>
+        
+        <p>The Deltacloud Core repository is hosted on Apache Incubator.
+        Apache uses Subversion, but there is a git mirror available:</p>
+        
+        <pre><code>$ mkdir deltacloud&#x000A;$ cd deltacloud&#x000A;$ git clone git://git.apache.org/deltacloud.git core&#x000A;</code></pre>
+        
+        <p>You can find the Subversion repository at: <a href="https://svn.apache.org/repos/asf/incubator/deltacloud">https://svn.apache.org/repos/asf/incubator/deltacloud</a>.</p>
+        
+        <h2 id="h2">Required packages</h2>
+        
+        <p>In order to make the Deltacloud components work, you'll need to
+        have the following packages installed (on Fedora 12; the names may vary on
+        your distro):</p>
+        
+        <pre><code>ruby&#x000A;ruby-devel&#x000A;gcc-c++&#x000A;libxml2-devel&#x000A;libxslt-devel&#x000A;</code></pre>
+        
+        <p><strong>Note:</strong> these packages are necessary for building all the required ruby gems
+        that Deltacloud requires. If you want to install the gems using your system's
+        package manager (yum, apt, ports, etc.) you won't need to install these
+        packages manually.</p>
+        
+        <h2 id="h3">Installing the Deltacloud Core</h2>
+        
+        <p>First, you need to install the server that will give you the Deltacloud API:</p>
+        
+        <pre><code>$ cd path/to/deltacloud/core/server&#x000A;$ rake package&#x000A;$ sudo gem install pkg/deltacloud-core-&lt;version&gt;.gem&#x000A;</code></pre>
+        
+        <p>Then install the client library:</p>
+        
+        <pre><code>$ cd path/to/deltacloud/core/client&#x000A;$ rake package&#x000A;$ sudo gem install pkg/deltacloud-client-&lt;version&gt;.gem&#x000A;</code></pre>
+        
+        <p>Once you have the client installed, run the following command:</p>
+        
+        <pre><code>$ cd path/to/deltacloud/core/client&#x000A;$ rake fixtures&#x000A;</code></pre>
+      </div>
+    </div>
+  </body>
+</html>