You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2015/04/30 08:28:08 UTC

svn commit: r1676904 [1/2] - in /jclouds/site-content: blog/ blog/2014/08/04/ blog/2014/08/04/1-release-2-committers/ blog/2014/08/05/ blog/2014/09/03/ blog/2014/09/03/better-builders/ blog/2014/09/04/ guides/azure-storage/ releasenotes/

Author: gaul
Date: Thu Apr 30 06:28:08 2015
New Revision: 1676904

URL: http://svn.apache.org/r1676904
Log:
deploy jclouds site content

Added:
    jclouds/site-content/blog/2014/08/04/
    jclouds/site-content/blog/2014/08/04/1-release-2-committers/
    jclouds/site-content/blog/2014/08/04/1-release-2-committers/index.html
    jclouds/site-content/blog/2014/09/03/
    jclouds/site-content/blog/2014/09/03/better-builders/
    jclouds/site-content/blog/2014/09/03/better-builders/index.html
Removed:
    jclouds/site-content/blog/2014/08/05/
    jclouds/site-content/blog/2014/09/04/
Modified:
    jclouds/site-content/blog/atom.xml
    jclouds/site-content/blog/index.html
    jclouds/site-content/guides/azure-storage/index.html
    jclouds/site-content/releasenotes/atom.xml

Added: jclouds/site-content/blog/2014/08/04/1-release-2-committers/index.html
URL: http://svn.apache.org/viewvc/jclouds/site-content/blog/2014/08/04/1-release-2-committers/index.html?rev=1676904&view=auto
==============================================================================
--- jclouds/site-content/blog/2014/08/04/1-release-2-committers/index.html (added)
+++ jclouds/site-content/blog/2014/08/04/1-release-2-committers/index.html Thu Apr 30 06:28:08 2015
@@ -0,0 +1,242 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+<title>Apache jclouds&reg; :: 1 release, 2 committers...a busy week for jclouds!</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="">
+<meta name="author" content="">
+
+<!--link rel="stylesheet/less" href="less/bootstrap.less" type="text/css" /-->
+<!--link rel="stylesheet/less" href="less/responsive.less" type="text/css" /-->
+<!--script src="js/less-1.3.3.min.js"></script-->
+<!--append ‘#!watch’ to the browser URL, then refresh the page. -->
+
+<link href="/css/bootstrap.min.css" rel="stylesheet">
+<link href="/css/style.css" rel="stylesheet">
+<link href="/css/syntax.css" rel="stylesheet">
+
+<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
+<!--[if lt IE 9]>
+<script src="js/html5shiv.js"></script>
+<![endif]-->
+
+<!-- Fav and touch icons -->
+<!--
+<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/img/apple-touch-icon-144-precomposed.png">
+<link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/apple-touch-icon-114-precomposed.png">
+<link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/apple-touch-icon-72-precomposed.png">
+<link rel="apple-touch-icon-precomposed" href="/img/apple-touch-icon-57-precomposed.png">
+-->
+<link rel="shortcut icon" href="/favicon.ico">
+
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Blog Posts Feed">
+<link rel="alternate" type="application/atom+xml" href="/releasenotes/atom.xml" title="Release Notes Feed">
+
+<script type="text/javascript" src="/js/jquery.min.js"></script>
+<script type="text/javascript" src="/js/bootstrap.min.js"></script>
+<script type="text/javascript" src="/js/toc.js"></script>
+
+<script type="text/javascript">
+    var _gaq = _gaq || [];
+    _gaq.push(['_setAccount', 'UA-8638379-1']);
+    _gaq.push(['_trackPageview']);
+
+    (function() {
+     var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+     })();
+</script>
+<script type="text/javascript">
+    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+     (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+     m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+     })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+    ga('create', 'UA-47106724-1', 'jclouds.apache.org');
+    ga('send', 'pageview');
+</script>
+
+    </head>
+    <body>
+        <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
+    <div class="container">
+        <div class="navbar-header">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+                <span class="sr-only">Toggle navigation</span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+            </button>
+            <a class="navbar-brand" href="/">Apache jclouds &reg;</a>
+        </div>
+
+        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+            <ul class="nav navbar-nav">
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Getting Started<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/start/what-is-jclouds/">What Is Apache jclouds?</a></li>
+                        <li><a href="/start/install/">Installation Guide</a></li>
+                        <li class="divider"></li>
+                        <li><a href="/start/concepts/">Core Concepts</a></li>
+                        <li><a href="/start/compute/">ComputeService</a></li>
+                        <li><a href="/start/blobstore/">BlobStore</a></li>
+                        <li><a href="http://github.com/jclouds/jclouds-examples">Examples</a></li>
+                    </ul>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Documentation<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/reference/providers/">Cloud Providers</a></li>
+                        <li><a href="/guides">User Guides</a></li>
+                        <li><a href="/reference/troubleshooting/">Troubleshooting</a></li>
+                        <li><a href="/reference/configuration/">Configuration</a></li>
+                        <li><a href="/reference/logging/">Logging</a></li>
+                        <li><a href="/reference/javadoc/">Javadoc</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Developer Guides</li>
+                        <li><a href="https://cwiki.apache.org/confluence/display/JCLOUDS/">Wiki</a></li>
+                    </ul>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Community<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/community/">Get In Touch!</a></li>
+                        <li><a href="http://www.meetup.com/jclouds/">Attend An Event</a></li>
+                        <li><a href="/community/users/">Who Is Using jclouds?</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Contribute</li>
+                        <li><a href="/reference/report-a-bug/">Report a Bug</a></li>
+                        <li><a href="http://jclouds.ci.cloudbees.com">Continuous Integration</a></li>
+                        <li><a href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute">How To Contribute Code</a></li>
+                        <li><a href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute+Documentation">How To Contribute Documentation</a></li>
+                    </ul>
+                </li>
+                <li><a href="/blog">Blog</a></li>
+            </ul>
+            <ul class="nav navbar-nav navbar-right">
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Release Notes<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <!-- only keep the release notes for supported versions in this list -->
+                        <li><a href="/releasenotes/1.9.0">1.9.0</a></li>
+                        <li><a href="/releasenotes/1.8.1">1.8.1</a></li>
+                        <li><a href="/releasenotes/1.8.0">1.8.0</a></li>
+                        <li><a href="/releasenotes/1.7.3">1.7.3</a></li>
+                        <li><a href="/releasenotes/1.7.2">1.7.2</a></li>
+                        <li><a href="/releasenotes/1.7.1">1.7.1</a></li>
+                        <li><a href="/releasenotes/1.7.0">1.7.0</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Previous releases</li>
+                        <li><a href="/releasenotes">Release archive</a></li>
+                    </ul>
+                </li>
+                <li>
+                    <div>
+                        <a class="btn btn-success navbar-btn" href="/start/install/">
+                            <span class="glyphicon glyphicon-download"></span>
+                            Install
+                        </a>
+                    </div>
+                </li>
+            </ul>
+        </div>
+    </div>
+</nav>
+
+        <div class="container">
+            <div class="page-header">
+                <h1>1 release, 2 committers...a busy week for jclouds!</h1>
+                <span class="text-muted">04 August 2014, by <a href="http://blog.xebialabs.com/author/aphillips/">Andrew Phillips</a></span>
+            </div>
+            <p><img class="img-right" src="/img/posts/chris-and-andrea.png"/>There's a lot going on this week for the jclouds community. Most importantly, we're really pleased to introduce two new committers: Andrea Turli and Chris Custine.</p>
+
+<!--more-->
+
+
+<p><a href="https://twitter.com/turlinux">Andrea</a> has been involved with jclouds for quite a while, working previously on the libvirt and vSphere <a href="/start/compute/">compute</a> providers. He's recently brought SoftLayer support up to speed and contributed the new <a href="/guides/docker/">Docker provider</a>, which is a really exciting addition.</p>
+
+<p><a href="https://twitter.com/ccustine">Chris</a> also has a lot of prior experience with many areas of jclouds, including <a href="/guides/chef/">Chef</a> and <a href="/guides/karaf/">Karaf</a>, as well as contributing to a number of projects in the surrounding ecosystem. He's recently worked on <a href="/guides/openstack">OpenStack</a>, especially on getting <a href="/guides/hpcloud/">HP Cloud</a>'s compute and blobstore providers back in shape.</p>
+
+<p>Both Andrea and Chris have been active in the jclouds community too, regularly contributing to discussions and helping to answer questions on the mailing lists and IRC. We're very glad to have both on board!</p>
+
+<p>In other news: we've been busy <a href="http://markmail.org/thread/7ixght2jgfbu73ok">getting the 1.8.0 release ready</a>, which (advance warning here!) will be the last jclouds release to support Java 6. More details to come once the release has been finalized...watch this space!</p>
+
+            
+            <div id="comments">
+                <hr/>
+                <div id="disqus_thread"></div>
+<script type="text/javascript">
+var disqus_shortname = 'jclouds';
+/* * * DON'T EDIT BELOW THIS LINE * * */
+(function() {
+    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+    dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
+    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+})();
+</script>
+<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">Comments powered by Disqus.</a></noscript>
+<a href="http://disqus.com" class="dsq-brlink">Comments powered by <span class="logo-disqus">Disqus</span></a>
+
+            </div>
+            
+            <div class="row clearfix">
+                <div id="footer" class="col-md-12 column">
+                    <div id="footer">
+    <hr/>
+    <div class="row clearfix">
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="/start/">Getting Started</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="/reference/report-a-bug/">Report a Bug</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a href="https://github.com/jclouds/jclouds-site/edit/master/_posts/2014-08-04-1-release-2-committers.md">Fix This Page</a><a class="text-primary" href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute+Documentation"><sup>*</sup></a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute">Contribute Code</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="/community/">Contact Us</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="https://twitter.com/jclouds">Follow Us</a>
+            </p>
+        </div>
+    </div>
+    <hr style="margin-top: 10px"/>
+    <div class="row clearfix">
+        <div class="col-md-12 column">
+            <p class="text-center">
+              Copyright &copy; 2011-2014 <a href="http://www.apache.org">The Apache Software Foundation</a>. All Rights Reserved.
+            </p>
+            <p class="text-center">
+              Apache, jclouds, Apache jclouds, the jclouds logo, and the Apache feather logos are registered trademarks or trademarks of the Apache Software Foundation.
+            </p>
+            <p class="text-center">
+              <img src="/img/feather-small.gif" width="80", height="24"/>
+            </p>
+            <br/>
+        </div>
+    </div>
+</div>
+
+                </div>
+            </div>
+        </div>
+    </body>
+</html>

Added: jclouds/site-content/blog/2014/09/03/better-builders/index.html
URL: http://svn.apache.org/viewvc/jclouds/site-content/blog/2014/09/03/better-builders/index.html?rev=1676904&view=auto
==============================================================================
--- jclouds/site-content/blog/2014/09/03/better-builders/index.html (added)
+++ jclouds/site-content/blog/2014/09/03/better-builders/index.html Thu Apr 30 06:28:08 2015
@@ -0,0 +1,350 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+<title>Apache jclouds&reg; :: Better Builders with jclouds!</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="">
+<meta name="author" content="">
+
+<!--link rel="stylesheet/less" href="less/bootstrap.less" type="text/css" /-->
+<!--link rel="stylesheet/less" href="less/responsive.less" type="text/css" /-->
+<!--script src="js/less-1.3.3.min.js"></script-->
+<!--append ‘#!watch’ to the browser URL, then refresh the page. -->
+
+<link href="/css/bootstrap.min.css" rel="stylesheet">
+<link href="/css/style.css" rel="stylesheet">
+<link href="/css/syntax.css" rel="stylesheet">
+
+<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
+<!--[if lt IE 9]>
+<script src="js/html5shiv.js"></script>
+<![endif]-->
+
+<!-- Fav and touch icons -->
+<!--
+<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/img/apple-touch-icon-144-precomposed.png">
+<link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/apple-touch-icon-114-precomposed.png">
+<link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/apple-touch-icon-72-precomposed.png">
+<link rel="apple-touch-icon-precomposed" href="/img/apple-touch-icon-57-precomposed.png">
+-->
+<link rel="shortcut icon" href="/favicon.ico">
+
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Blog Posts Feed">
+<link rel="alternate" type="application/atom+xml" href="/releasenotes/atom.xml" title="Release Notes Feed">
+
+<script type="text/javascript" src="/js/jquery.min.js"></script>
+<script type="text/javascript" src="/js/bootstrap.min.js"></script>
+<script type="text/javascript" src="/js/toc.js"></script>
+
+<script type="text/javascript">
+    var _gaq = _gaq || [];
+    _gaq.push(['_setAccount', 'UA-8638379-1']);
+    _gaq.push(['_trackPageview']);
+
+    (function() {
+     var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+     })();
+</script>
+<script type="text/javascript">
+    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+     (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+     m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+     })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+    ga('create', 'UA-47106724-1', 'jclouds.apache.org');
+    ga('send', 'pageview');
+</script>
+
+    </head>
+    <body>
+        <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
+    <div class="container">
+        <div class="navbar-header">
+            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+                <span class="sr-only">Toggle navigation</span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+            </button>
+            <a class="navbar-brand" href="/">Apache jclouds &reg;</a>
+        </div>
+
+        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+            <ul class="nav navbar-nav">
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Getting Started<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/start/what-is-jclouds/">What Is Apache jclouds?</a></li>
+                        <li><a href="/start/install/">Installation Guide</a></li>
+                        <li class="divider"></li>
+                        <li><a href="/start/concepts/">Core Concepts</a></li>
+                        <li><a href="/start/compute/">ComputeService</a></li>
+                        <li><a href="/start/blobstore/">BlobStore</a></li>
+                        <li><a href="http://github.com/jclouds/jclouds-examples">Examples</a></li>
+                    </ul>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Documentation<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/reference/providers/">Cloud Providers</a></li>
+                        <li><a href="/guides">User Guides</a></li>
+                        <li><a href="/reference/troubleshooting/">Troubleshooting</a></li>
+                        <li><a href="/reference/configuration/">Configuration</a></li>
+                        <li><a href="/reference/logging/">Logging</a></li>
+                        <li><a href="/reference/javadoc/">Javadoc</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Developer Guides</li>
+                        <li><a href="https://cwiki.apache.org/confluence/display/JCLOUDS/">Wiki</a></li>
+                    </ul>
+                </li>
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Community<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <li><a href="/community/">Get In Touch!</a></li>
+                        <li><a href="http://www.meetup.com/jclouds/">Attend An Event</a></li>
+                        <li><a href="/community/users/">Who Is Using jclouds?</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Contribute</li>
+                        <li><a href="/reference/report-a-bug/">Report a Bug</a></li>
+                        <li><a href="http://jclouds.ci.cloudbees.com">Continuous Integration</a></li>
+                        <li><a href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute">How To Contribute Code</a></li>
+                        <li><a href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute+Documentation">How To Contribute Documentation</a></li>
+                    </ul>
+                </li>
+                <li><a href="/blog">Blog</a></li>
+            </ul>
+            <ul class="nav navbar-nav navbar-right">
+                <li class="dropdown">
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Release Notes<strong class="caret"></strong></a>
+                    <ul class="dropdown-menu">
+                        <!-- only keep the release notes for supported versions in this list -->
+                        <li><a href="/releasenotes/1.9.0">1.9.0</a></li>
+                        <li><a href="/releasenotes/1.8.1">1.8.1</a></li>
+                        <li><a href="/releasenotes/1.8.0">1.8.0</a></li>
+                        <li><a href="/releasenotes/1.7.3">1.7.3</a></li>
+                        <li><a href="/releasenotes/1.7.2">1.7.2</a></li>
+                        <li><a href="/releasenotes/1.7.1">1.7.1</a></li>
+                        <li><a href="/releasenotes/1.7.0">1.7.0</a></li>
+                        <li class="divider"></li>
+                        <li class="dropdown-header">Previous releases</li>
+                        <li><a href="/releasenotes">Release archive</a></li>
+                    </ul>
+                </li>
+                <li>
+                    <div>
+                        <a class="btn btn-success navbar-btn" href="/start/install/">
+                            <span class="glyphicon glyphicon-download"></span>
+                            Install
+                        </a>
+                    </div>
+                </li>
+            </ul>
+        </div>
+    </div>
+</nav>
+
+        <div class="container">
+            <div class="page-header">
+                <h1>Better Builders with jclouds!</h1>
+                <span class="text-muted">03 September 2014, by Zack Shoylev</span>
+            </div>
+            <p>If you are a new <a href="jclouds.apache.org">jclouds</a> developer, or even if you are already developing jclouds support for any of the OpenStack or Rackspace APIs, you have likely seen the domain classes that are used throughout the the jclouds codebase.
+These classes are used to represent OpenStack resources, particularly the JSON structures supported by OpenStack APIs.</p>
+
+<!--more-->
+
+
+<p>For example, when listing database users in openstack-trove (the OpenStack database API), the service returns a JSON response body describing the existing users. This JSON might look something like this:</p>
+
+<div class="highlight"><pre><code class="json"><span class="p">{</span>
+    <span class="nt">&quot;users&quot;</span><span class="p">:</span> <span class="p">[</span>
+        <span class="p">{</span>
+            <span class="nt">&quot;databases&quot;</span><span class="p">:</span> <span class="p">[],</span>
+            <span class="nt">&quot;host&quot;</span><span class="p">:</span> <span class="s2">&quot;%&quot;</span><span class="p">,</span> 
+            <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;dbuser1&quot;</span>
+        <span class="p">},</span> 
+        <span class="p">{</span>
+            <span class="nt">&quot;databases&quot;</span><span class="p">:</span> <span class="p">[</span>
+                <span class="p">{</span>
+                    <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;databaseB&quot;</span>
+                <span class="p">},</span> 
+                <span class="p">{</span>
+                    <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;databaseC&quot;</span>
+                <span class="p">}</span>
+            <span class="p">],</span>
+            <span class="nt">&quot;host&quot;</span><span class="p">:</span> <span class="s2">&quot;%&quot;</span><span class="p">,</span>
+            <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;dbuser2&quot;</span>
+        <span class="p">},</span> 
+        <span class="p">{</span>
+            <span class="nt">&quot;databases&quot;</span><span class="p">:</span> <span class="p">[],</span> 
+            <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;dbuser3&quot;</span><span class="p">,</span>
+            <span class="nt">&quot;host&quot;</span><span class="p">:</span> <span class="s2">&quot;%&quot;</span>
+        <span class="p">},</span> 
+        <span class="p">{</span>
+            <span class="nt">&quot;databases&quot;</span><span class="p">:</span> <span class="p">[</span>
+                <span class="p">{</span>
+                    <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;sampledb&quot;</span>
+                <span class="p">}</span>
+            <span class="p">],</span>
+            <span class="nt">&quot;host&quot;</span><span class="p">:</span> <span class="s2">&quot;%&quot;</span><span class="p">,</span>
+            <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;demouser&quot;</span>
+        <span class="p">}</span>
+    <span class="p">]</span>
+<span class="p">}</span>
+</code></pre></div>
+
+
+<p>To parse the response, jclouds uses <a href="https://github.com/jclouds/jclouds/blob/master/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/domain/User.java">domain classes</a> to represent the JSON data returned by the service. The array of "users" is unwrapped into individual User domain objects. Conversely, when creating users, domain objects are transformed into a JSON request body.</p>
+
+<p>Because of the relative simplicity of user creation in trove, jclouds developers can use a create method in the features package without having to build an instance of the User class. For example, the developer might use a method such as</p>
+
+<div class="highlight"><pre><code class="java"><span class="kt">boolean</span> <span class="nf">create</span><span class="o">(</span><span class="n">String</span> <span class="n">userName</span><span class="o">,</span> <span class="n">String</span> <span class="n">password</span><span class="o">,</span> <span class="n">String</span> <span class="n">databaseName</span><span class="o">);</span>
+</code></pre></div>
+
+
+<p>In this case, it was easy to add support for this call by using a <a href="https://github.com/jclouds/jclouds/blob/master/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/binders/BindCreateUserToJson.java">map binder</a>.</p>
+
+<p>However, some APIs send or receive significantly more complex JSON structures. Recent work on Neutron has shown that there are benefits to increased consistency among the domain classes and the OpenStack API calls that use them.</p>
+
+<p>Current implementations have the following two issues :</p>
+
+<ol>
+<li>Heavy use of map-binders and parsers to transform JSON. Map-binders use  annotation-selected classes to map method data (such as the data in the create-user call above) to the JSON required by the service. The <a href="https://github.com/jclouds/jclouds-labs-openstack/blob/master/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseNetworkDetails.java">parsers</a> apply the reverse transformation: from JSON to domain objects.</li>
+<li>Lack of consistent, concise, and user-friendly way to use domain objects in create/update/list methods.</li>
+</ol>
+
+
+<p>In addition to fixing these issues, jclouds wants to provide developers with some compiler checks and other syntactic sugar (fluent builders), while also supporting different updating, creating, or listing validation strategies.</p>
+
+<p>We want to</p>
+
+<ol>
+<li>Ensure object immutability.</li>
+<li>Utilize the fluent builder pattern.</li>
+<li>Ensure that "create" objects can only be used for create; update for update; and listed resources cannot be directly sent back to the service.</li>
+<li>Reuse code and keep domain classes <a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself">DRY</a>.</li>
+<li>Allow using different validation strategies (for example, create vs update).</li>
+</ol>
+
+
+<p>We have been able to identify a pattern that addresses these issues. Here is some <a href="https://github.com/jclouds/jclouds-labs-openstack/blob/master/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/domain/Router.java">sample code</a>.</p>
+
+<p>This approach reuses code by having <a href="https://code.google.com/p/google-gson/">GSON</a> handle the domain objects directly, as much as possible, both for serialization and deserialization, thus eliminating map-binders and parsers in most cases. The domain classes annotate their member variables using the @Named (for serialization) and @ConstructorProperties (for deserialization) annotations.</p>
+
+<p>Many of the JSON attributes in Neutron are optional. GSON's jclouds configuration supports such optional values by using @Nullable and boxed types. An alternate supported method, more convoluted, implements Optional<T> private member variables and getter return types.</p>
+
+<p>To ensure immutability, users have no access to a constructor or setters, and instead they must instantiate domain objects by using a slightly modified Builder pattern. The builder pattern also provides proper validation and user-friendliness.</p>
+
+<p>Some <a href="https://github.com/jclouds/jclouds-labs-openstack/blob/master/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/domain/AddressPair.java">simpler classes</a> implement the regular fluent builder pattern.</p>
+
+<p>In <a href="https://github.com/jclouds/jclouds-labs-openstack/blob/master/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/NetworkApi.java">other cases</a>, the same domain class has several different purposes, such as making sure users have different Network-subtype object instances for updating, creating, and listing networks:</p>
+
+<ol>
+<li>Listing networks returns a Network or a list of Networks.</li>
+<li>Updating a network requires Network.UpdateOptions.</li>
+<li>Creating a network requires Network.CreateOptions.</li>
+</ol>
+
+
+<p>CreateOptions and UpdateOptions extend Network and implement their own copy constructors, with custom validation, if needed.</p>
+
+<p>To instantiate these create or update-specific objects, developers have access to CreateBuilder and UpdateBuilder, which both extend the regular Network builder abstract class. The only code these special builders implement: the constructor (taking as parameters any required properties), a build() method returning the create or update object, and also self(). The self method is needed to make sure we can reuse most of the Builder code, but still be able to chain the fluent builder methods.</p>
+
+<p>This is how it all works out from the developer's perspective:</p>
+
+<div class="highlight"><pre><code class="java"><span class="n">Network</span><span class="o">.</span><span class="na">CreateOptions</span> <span class="n">createNetwork</span> <span class="o">=</span> <span class="n">Network</span><span class="o">.</span><span class="na">createOptions</span><span class="o">(</span><span class="s">&quot;jclouds-wibble&quot;</span><span class="o">)</span>
+           <span class="o">.</span><span class="na">networkType</span><span class="o">(</span><span class="n">NetworkType</span><span class="o">.</span><span class="na">LOCAL</span><span class="o">)</span>
+           <span class="o">.</span><span class="na">build</span><span class="o">();</span>
+
+<span class="n">Network</span> <span class="n">network</span> <span class="o">=</span> <span class="n">networkApi</span><span class="o">.</span><span class="na">create</span><span class="o">(</span><span class="n">createNetwork</span><span class="o">);</span>
+
+<span class="n">Network</span><span class="o">.</span><span class="na">UpdateOptions</span> <span class="n">updateNetwork</span> <span class="o">=</span> <span class="n">Network</span><span class="o">.</span><span class="na">updateOptions</span><span class="o">()</span>
+           <span class="o">.</span><span class="na">name</span><span class="o">(</span><span class="s">&quot;jclouds-wibble-updated&quot;</span><span class="o">)</span>
+           <span class="o">.</span><span class="na">networkType</span><span class="o">(</span><span class="n">NetworkType</span><span class="o">.</span><span class="na">LOCAL</span><span class="o">)</span>
+           <span class="o">.</span><span class="na">build</span><span class="o">();</span>
+
+<span class="n">networkApi</span><span class="o">.</span><span class="na">update</span><span class="o">(</span><span class="s">&quot;some id&quot;</span><span class="o">,</span> <span class="n">updateNetwork</span><span class="o">);</span>
+</code></pre></div>
+
+
+<p>This ensures developers get an easy to understand interface, with validation and compiler checks. It also allows jclouds developers to use significantly less code when developing complex domain classes that need to be reused in list/create/update API calls.</p>
+
+            
+            <div id="comments">
+                <hr/>
+                <div id="disqus_thread"></div>
+<script type="text/javascript">
+var disqus_shortname = 'jclouds';
+/* * * DON'T EDIT BELOW THIS LINE * * */
+(function() {
+    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+    dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
+    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+})();
+</script>
+<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">Comments powered by Disqus.</a></noscript>
+<a href="http://disqus.com" class="dsq-brlink">Comments powered by <span class="logo-disqus">Disqus</span></a>
+
+            </div>
+            
+            <div class="row clearfix">
+                <div id="footer" class="col-md-12 column">
+                    <div id="footer">
+    <hr/>
+    <div class="row clearfix">
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="/start/">Getting Started</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="/reference/report-a-bug/">Report a Bug</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a href="https://github.com/jclouds/jclouds-site/edit/master/_posts/2014-09-03-better-builders.md">Fix This Page</a><a class="text-primary" href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute+Documentation"><sup>*</sup></a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="https://cwiki.apache.org/confluence/display/JCLOUDS/How+to+Contribute">Contribute Code</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="/community/">Contact Us</a>
+            </p>
+        </div>
+        <div class="col-md-2 column">
+            <p class="text-center">
+                <a class="text-primary" href="https://twitter.com/jclouds">Follow Us</a>
+            </p>
+        </div>
+    </div>
+    <hr style="margin-top: 10px"/>
+    <div class="row clearfix">
+        <div class="col-md-12 column">
+            <p class="text-center">
+              Copyright &copy; 2011-2014 <a href="http://www.apache.org">The Apache Software Foundation</a>. All Rights Reserved.
+            </p>
+            <p class="text-center">
+              Apache, jclouds, Apache jclouds, the jclouds logo, and the Apache feather logos are registered trademarks or trademarks of the Apache Software Foundation.
+            </p>
+            <p class="text-center">
+              <img src="/img/feather-small.gif" width="80", height="24"/>
+            </p>
+            <br/>
+        </div>
+    </div>
+</div>
+
+                </div>
+            </div>
+        </div>
+    </body>
+</html>

Modified: jclouds/site-content/blog/atom.xml
URL: http://svn.apache.org/viewvc/jclouds/site-content/blog/atom.xml?rev=1676904&r1=1676903&r2=1676904&view=diff
==============================================================================
--- jclouds/site-content/blog/atom.xml (original)
+++ jclouds/site-content/blog/atom.xml Thu Apr 30 06:28:08 2015
@@ -114,10 +114,10 @@
   </entry>
   
   <entry>
-    <id>http://jclouds.apache.org/blog/2014/09/04/better-builders</id>
+    <id>http://jclouds.apache.org/blog/2014/09/03/better-builders</id>
     <title type="html"><![CDATA[Better Builders with jclouds!]]></title>
-    <link href="http://jclouds.apache.org/blog/2014/09/04/better-builders"/>
-    <updated>2014-09-04T00:00:00Z</updated>
+    <link href="http://jclouds.apache.org/blog/2014/09/03/better-builders"/>
+    <updated>2014-09-03T00:00:00Z</updated>
     <content type="html"><![CDATA[<p>If you are a new <a href="jclouds.apache.org">jclouds</a> developer, or even if you are already developing jclouds support for any of the OpenStack or Rackspace APIs, you have likely seen the domain classes that are used throughout the the jclouds codebase.
 These classes are used to represent OpenStack resources, particularly the JSON structures supported by OpenStack APIs.</p>
 
@@ -242,10 +242,10 @@ These classes are used to represent Open
   </entry>
   
   <entry>
-    <id>http://jclouds.apache.org/blog/2014/08/05/1-release-2-committers</id>
+    <id>http://jclouds.apache.org/blog/2014/08/04/1-release-2-committers</id>
     <title type="html"><![CDATA[1 release, 2 committers...a busy week for jclouds!]]></title>
-    <link href="http://jclouds.apache.org/blog/2014/08/05/1-release-2-committers"/>
-    <updated>2014-08-05T00:00:00Z</updated>
+    <link href="http://jclouds.apache.org/blog/2014/08/04/1-release-2-committers"/>
+    <updated>2014-08-04T00:00:00Z</updated>
     <content type="html"><![CDATA[<p><img class="img-right" src="/img/posts/chris-and-andrea.png"/>There's a lot going on this week for the jclouds community. Most importantly, we're really pleased to introduce two new committers: Andrea Turli and Chris Custine.</p>
 
 <!--more-->

Modified: jclouds/site-content/blog/index.html
URL: http://svn.apache.org/viewvc/jclouds/site-content/blog/index.html?rev=1676904&r1=1676903&r2=1676904&view=diff
==============================================================================
--- jclouds/site-content/blog/index.html (original)
+++ jclouds/site-content/blog/index.html Thu Apr 30 06:28:08 2015
@@ -168,14 +168,14 @@
 <p>Google Summer of Code 2014 has concluded and both Apache jclouds students have successfully completed their projects, Amazon Glacier and Google Cloud Storage support.
 </p>
 
-<h3><a class="text-primary" href="/blog/2014/09/04/better-builders">Better Builders with jclouds!</a></h3>
-<span class="text-muted">04 September 2014, by Zack Shoylev</span>
+<h3><a class="text-primary" href="/blog/2014/09/03/better-builders">Better Builders with jclouds!</a></h3>
+<span class="text-muted">03 September 2014, by Zack Shoylev</span>
 <p>If you are a new jclouds developer, or even if you are already developing jclouds support for any of the OpenStack or Rackspace APIs, you have likely seen the domain classes that are used throughout the the jclouds codebase.
 These classes are used to represent OpenStack resources, particularly the JSON structures supported by OpenStack APIs.
 </p>
 
-<h3><a class="text-primary" href="/blog/2014/08/05/1-release-2-committers">1 release, 2 committers...a busy week for jclouds!</a></h3>
-<span class="text-muted">05 August 2014, by <a href="http://blog.xebialabs.com/author/aphillips/">Andrew Phillips</a></span>
+<h3><a class="text-primary" href="/blog/2014/08/04/1-release-2-committers">1 release, 2 committers...a busy week for jclouds!</a></h3>
+<span class="text-muted">04 August 2014, by <a href="http://blog.xebialabs.com/author/aphillips/">Andrew Phillips</a></span>
 <p>There's a lot going on this week for the jclouds community. Most importantly, we're really pleased to introduce two new committers: Andrea Turli and Chris Custine.
 </p>
 

Modified: jclouds/site-content/guides/azure-storage/index.html
URL: http://svn.apache.org/viewvc/jclouds/site-content/guides/azure-storage/index.html?rev=1676904&r1=1676903&r2=1676904&view=diff
==============================================================================
--- jclouds/site-content/guides/azure-storage/index.html (original)
+++ jclouds/site-content/guides/azure-storage/index.html Thu Apr 30 06:28:08 2015
@@ -155,16 +155,16 @@
 <li>Get your account and key
 
 <ul>
-<li>Login to the <a href="http://windows.azure.com">Windows Azure Portal</a></li>
-<li>Click New Project, and then select Storage Account.</li>
-<li>Enter a project label and click Next.</li>
-<li>Enter the same name for the Storage Account Name. Make sure the account is available and then click <em>Create</em>
+<li>Login to the <a href="https://manage.windowsazure.com">Microsoft Azure Portal</a>. The <a href="https://portal.azure.com">new portal</a> is in preview stage and hence instructions are not aligned with it.</li>
+<li>Click 'New', 'Data Servies', 'Storage' and 'Quick Create'.</li>
+<li>Enter the Storage Account Name. Make sure the account is available and then click <em>Create</em>
 
 <ul>
-<li>This is your account in jclouds.</li>
+<li>This is your Storage account name you use in jclouds.</li>
 </ul>
 </li>
-<li>Under the main azure screen, you should see Cloud Storage and the service you setup; Click on that.
+<li>Under the main Azure screen, you should see Cloud Storage and the service you setup; Click on that.</li>
+<li>Click on 'Manage Access Keys' at bottom of the page and copy Primary Access Key.
 
 <ul>
 <li>Primary Access Key is the key you use in jclouds</li>
@@ -179,29 +179,55 @@
 <li>Get the dependency <code>org.apache.jclouds.provider/azureblob</code> using jclouds <a href="/start/install">Installation</a>.</li>
 </ul>
 </li>
-<li>Start coding</li>
+<li>Setup your project to include 'guava'. Include following dependency to jclouds <a href="/start/install">Installation</a>. Update the version mentioned in dependency below to the latest available version.
+ <dependency>
+     <groupId>com.google.guava</groupId>
+     <artifactId>guava</artifactId>
+     <version>16.0</version>
+ </dependency></li>
+<li>Start coding. Replace values in angular brackets &lt;> with actual values.</li>
 </ol>
 
 
-<div class="highlight"><pre><code class="java"><span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">jclouds</span><span class="o">.</span><span class="na">azure</span><span class="o">.</span><span class="na">storage</span><span class="o">.</span><span class="na">blob</span><span class="o">.</span><span class="na">options</span><span class="o">.</span><span class="na">CreateContainerOptions</span><span class="o">.</span><span class="na">Builder</span><span class="o">.</span><span class="na">withPublicAcl</span><span class="o">;</span>
+<div class="highlight"><pre><code class="java"><span class="kn">import</span> <span class="nn">org.jclouds.blobstore.*</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.jclouds.ContextBuilder</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.jclouds.blobstore.domain.*</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.jclouds.azureblob.*</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">com.google.common.io.*</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">java.io.*</span><span class="o">;</span>
+
+<span class="n">String</span> <span class="n">storageAccountName</span> <span class="o">=</span> <span class="s">&quot;&lt;Your storage account name&gt;&quot;</span><span class="o">;</span>
+<span class="n">String</span> <span class="n">storageAccountKey</span> <span class="o">=</span> <span class="s">&quot;&lt;Your storage account primary access key&gt;&quot;</span><span class="o">;</span>
+<span class="n">String</span> <span class="n">containerName</span> <span class="o">=</span> <span class="s">&quot;&lt;Your container name&gt;&quot;</span><span class="o">;</span>
+<span class="n">String</span> <span class="n">blobFullyQualifiedFileName</span> <span class="o">=</span> <span class="s">&quot;&lt;Fully qualified filename&gt;&quot;</span><span class="o">;</span>
+<span class="n">String</span> <span class="n">blobName</span> <span class="o">=</span> <span class="s">&quot;&lt;Your blob name&gt;&quot;</span><span class="o">;</span>
 
-<span class="c1">// get a context with amazon that offers the portable BlobStore api</span>
+<span class="c1">// Get a context with amazon that offers the portable BlobStore api</span>
 <span class="n">BlobStoreContext</span> <span class="n">context</span> <span class="o">=</span> <span class="n">ContextBuilder</span><span class="o">.</span><span class="na">newBuilder</span><span class="o">(</span><span class="s">&quot;azureblob&quot;</span><span class="o">)</span>
-                 <span class="o">.</span><span class="na">credentials</span><span class="o">(</span><span class="n">accesskeyid</span><span class="o">,</span> <span class="n">secretkey</span><span class="o">)</span>
+                 <span class="o">.</span><span class="na">credentials</span><span class="o">(</span><span class="n">storageAccountName</span><span class="o">,</span> <span class="n">storageAccountKey</span><span class="o">)</span>
                  <span class="o">.</span><span class="na">buildView</span><span class="o">(</span><span class="n">BlobStoreContext</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
 
-<span class="c1">//create a container in the default location</span>
-<span class="n">context</span><span class="o">.</span><span class="na">getBlobStore</span><span class="o">().</span><span class="na">createContainerInLocation</span><span class="o">(</span><span class="kc">null</span><span class="o">,</span> <span class="n">bucket</span><span class="o">);</span>
+<span class="c1">// Access the BlobStore</span>
+<span class="n">BlobStore</span> <span class="n">blobStore</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getBlobStore</span><span class="o">();</span>
 
-<span class="c1">// use the map interface for easy access to put/get things, keySet, etc.</span>
-<span class="n">context</span><span class="o">.</span><span class="na">createInputStreamMap</span><span class="o">(</span><span class="n">bucket</span><span class="o">).</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;blob.txt&quot;</span><span class="o">,</span> <span class="n">inputStream</span><span class="o">);</span>
+<span class="c1">// Create a Container</span>
+<span class="n">blobStore</span><span class="o">.</span><span class="na">createContainerInLocation</span><span class="o">(</span><span class="kc">null</span><span class="o">,</span> <span class="n">containerName</span><span class="o">);</span>
 
-<span class="c1">// when you need access to azureblob-specific features, use the provider-specific context</span>
-<span class="n">AzureBlobClient</span> <span class="n">client</span> <span class="o">=</span> <span class="n">AzureBlobClient</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">cast</span><span class="o">(</span><span class="n">context</span><span class="o">.</span><span class="na">getProviderSpecificContext</span><span class="o">().</span><span class="na">getApi</span><span class="o">());</span>
-
-<span class="c1">// create a root-level container with a public acl</span>
-<span class="n">client</span><span class="o">.</span><span class="na">createRootContainer</span><span class="o">(</span><span class="n">withPublicAcl</span><span class="o">());</span>
+<span class="c1">// Create a blob. </span>
+<span class="n">ByteSource</span> <span class="n">payload</span> <span class="o">=</span> <span class="n">Files</span><span class="o">.</span><span class="na">asByteSource</span><span class="o">(</span><span class="k">new</span> <span class="n">File</span><span class="o">(</span><span class="n">blobFullyQualifiedFileName</span><span class="o">));</span>
+<span class="n">Blob</span> <span class="n">blob</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">getBlobStore</span><span class="o">().</span><span class="na">blobBuilder</span><span class="o">(</span><span class="n">blobName</span><span class="o">)</span>
+    <span class="o">.</span><span class="na">payload</span><span class="o">(</span><span class="n">payload</span><span class="o">)</span>  <span class="c1">// or InputStream</span>
+    <span class="o">.</span><span class="na">contentLength</span><span class="o">(</span><span class="n">payload</span><span class="o">.</span><span class="na">size</span><span class="o">())</span>
+    <span class="o">.</span><span class="na">build</span><span class="o">();</span>
+
+<span class="c1">// Upload the Blob</span>
+<span class="n">blobStore</span><span class="o">.</span><span class="na">putBlob</span><span class="o">(</span><span class="n">containerName</span><span class="o">,</span> <span class="n">blob</span><span class="o">);</span>
+
+<span class="c1">// When you need access to azureblob-specific features, use the provider-specific context</span>
+<span class="n">AzureBlobClient</span> <span class="n">azureBlobClient</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">unwrapApi</span><span class="o">(</span><span class="n">AzureBlobClient</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+<span class="n">Object</span> <span class="n">object</span> <span class="o">=</span> <span class="n">azureBlobClient</span><span class="o">.</span><span class="na">getBlobProperties</span><span class="o">(</span><span class="n">containerName</span><span class="o">,</span> <span class="n">blobName</span><span class="o">);</span>
 
+<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Object: &quot;</span> <span class="o">+</span> <span class="n">object</span><span class="o">);</span>
 <span class="n">context</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
 </code></pre></div>