You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2018/01/09 08:14:44 UTC

[03/12] cayenne-website git commit: test publish

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/docs/4.0/cayenne-guide/index.html
----------------------------------------------------------------------
diff --git a/docs/4.0/cayenne-guide/index.html b/docs/4.0/cayenne-guide/index.html
index 979fe99..a0cc95b 100644
--- a/docs/4.0/cayenne-guide/index.html
+++ b/docs/4.0/cayenne-guide/index.html
@@ -5,7 +5,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
         <link rel="shortcut icon" href="/favicon.ico" />
         <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-144-precomposed.png" sizes="144x144" />
-        <link rel="stylesheet" href="http://54.84.229.93/css/styles-452af12eaa.css"/>
+        <link rel="stylesheet" href="http://54.84.229.93/css/styles-735ddf3e5f.css"/>
         <script src="http://54.84.229.93/js/bundle-bcaaf59313.js"></script>
         <title>Cayenne Guide &middot; Apache Cayenne</title>
     </head>
@@ -2946,33 +2946,57 @@ select.setParameters(Collections.singletonMap("a", a));</code></pre>
       </div> 
      </div> 
      <div class="sect5"> 
-      <h6 id="note"><a class="anchor" href="#note"></a>Note</h6> 
+      <h6 id="chain-and-chunk"><a class="anchor" href="#chain-and-chunk"></a>#chain and #chunk</h6> 
       <div class="paragraph"> 
-       <p>For advanced features you may look at the <a href="#velocity">Apache Velocity extension</a></p> 
-      </div> 
-     </div> 
-     <div class="sect5"> 
-      <h6 id="mapping-sqltemplate-results"><a class="anchor" href="#mapping-sqltemplate-results"></a>Mapping SQLTemplate Results</h6> 
-      <div class="paragraph"> 
-       <p>Here we’ll discuss how to convert the data selected via SQLTemplate to some useable format, compatible with other query results. It can either be very simple or very complex, depending on the structure of the SQL, JDBC driver nature and the desired result structure. This section presents various tips and tricks dealing with result mapping.</p> 
+       <p><code>#chain</code> and <code>#chunk</code> directives are used for conditional inclusion of SQL code. They are used together with <code>#chain</code> wrapping multiple <code>#chunks</code>. A chunk evaluates its parameter expression and if it is NULL suppresses rendering of the enclosed SQL block. A chain renders its prefix and its chunks joined by the operator. If all the chunks are suppressed, the chain itself is suppressed. This allows to work with otherwise hard to script SQL semantics. E.g. a WHERE clause can contain multiple conditions joined with AND or OR. Application code would like to exclude a condition if its right-hand parameter is not present (similar to Expression pruning discussed above). If all conditions are excluded, the entire WHERE clause should be excluded. <code>#chain + #chunk</code> allows to do that.</p> 
       </div> 
       <div class="paragraph"> 
-       <p>By default SQLTemplate is expected to return a List of Persistent objects of its root type. This is the simple case:</p> 
+       <p>Semantics:</p> 
       </div> 
       <div class="listingblock"> 
        <div class="content"> 
-        <pre class="highlight"><code class="language-Java Java" data-lang="Java">SQLTemplate query = new SQLTemplate(Artist.class, "SELECT * FROM ARTIST");
-
-// List of Artists
-List&lt;Artist&gt; artists = context.performQuery(query);</code></pre> 
+        <pre>#chain(operator) ... #end
+    #chain(operator prefix) ... #end
+    #chunk() ... #end
+    #chunk(param) ... #end
+    ...</pre> 
        </div> 
       </div> 
       <div class="paragraph"> 
-       <p>Just like SelectQuery, SQLTemplate can fetch DataRows. In fact DataRows option is very useful with SQLTemplate, as the result type most often than not does not represent a Cayenne entity, but instead may be some aggregated report or any other data whose object structure is opaque to Cayenne:</p> 
+       <p>Full example:</p> 
       </div> 
       <div class="listingblock"> 
        <div class="content"> 
-        <pre class="highlight"><code class="language-Java Java" data-lang="Java">String sql = "SELECT t0.NAME, COUNT(1) FROM ARTIST t0 JOIN PAINTING t1 ON (t0.ID = t1.ARTIST_ID) "
+        <pre>#chain('OR' 'WHERE')
+    #chunk($name) NAME LIKE #bind($name) #end
+    #chunk($id) ARTIST_ID &gt; #bind($id) #end
+#end"</pre> 
+       </div> 
+      </div> 
+     </div> 
+    </div> 
+    <div class="sect4"> 
+     <h5 id="mapping-sqltemplate-results"><a class="anchor" href="#mapping-sqltemplate-results"></a>Mapping SQLTemplate Results</h5> 
+     <div class="paragraph"> 
+      <p>Here we’ll discuss how to convert the data selected via SQLTemplate to some useable format, compatible with other query results. It can either be very simple or very complex, depending on the structure of the SQL, JDBC driver nature and the desired result structure. This section presents various tips and tricks dealing with result mapping.</p> 
+     </div> 
+     <div class="paragraph"> 
+      <p>By default SQLTemplate is expected to return a List of Persistent objects of its root type. This is the simple case:</p> 
+     </div> 
+     <div class="listingblock"> 
+      <div class="content"> 
+       <pre class="highlight"><code class="language-Java Java" data-lang="Java">SQLTemplate query = new SQLTemplate(Artist.class, "SELECT * FROM ARTIST");
+
+// List of Artists
+List&lt;Artist&gt; artists = context.performQuery(query);</code></pre> 
+      </div> 
+     </div> 
+     <div class="paragraph"> 
+      <p>Just like SelectQuery, SQLTemplate can fetch DataRows. In fact DataRows option is very useful with SQLTemplate, as the result type most often than not does not represent a Cayenne entity, but instead may be some aggregated report or any other data whose object structure is opaque to Cayenne:</p> 
+     </div> 
+     <div class="listingblock"> 
+      <div class="content"> 
+       <pre class="highlight"><code class="language-Java Java" data-lang="Java">String sql = "SELECT t0.NAME, COUNT(1) FROM ARTIST t0 JOIN PAINTING t1 ON (t0.ID = t1.ARTIST_ID) "
     + "GROUP BY t0.NAME ORDER BY COUNT(1)";
 SQLTemplate query = new SQLTemplate(Artist.class, sql);
 
@@ -2981,17 +3005,17 @@ query.setFetchingDataRows(true);
 
 // List of DataRow
 List&lt;DataRow&gt; rows = context.performQuery(query);</code></pre> 
-       </div> 
-      </div> 
-      <div class="paragraph"> 
-       <p>In the example above, even though the query root is Artist. the result is a list of artist names with painting counts (as mentioned before in such case "root" is only used to find the DB to fetch against, but has no bearning on the result). The DataRows here are the most appropriate and desired result type.</p> 
-      </div> 
-      <div class="paragraph"> 
-       <p>In a more advanced case you may decide to fetch a list of scalars or a list of Object[] with each array entry being either an entity or a scalar. You probably won’t be doing this too often and it requires quite a lot of work to setup, but if you want your SQLTemplate to return results similar to EJBQLQuery, it is doable using SQLResult as described below:</p> 
       </div> 
-      <div class="listingblock"> 
-       <div class="content"> 
-        <pre class="highlight"><code class="language-Java Java" data-lang="Java">SQLTemplate query = new SQLTemplate(Painting.class, "SELECT ESTIMATED_PRICE P FROM PAINTING");
+     </div> 
+     <div class="paragraph"> 
+      <p>In the example above, even though the query root is Artist. the result is a list of artist names with painting counts (as mentioned before in such case "root" is only used to find the DB to fetch against, but has no bearning on the result). The DataRows here are the most appropriate and desired result type.</p> 
+     </div> 
+     <div class="paragraph"> 
+      <p>In a more advanced case you may decide to fetch a list of scalars or a list of Object[] with each array entry being either an entity or a scalar. You probably won’t be doing this too often and it requires quite a lot of work to setup, but if you want your SQLTemplate to return results similar to EJBQLQuery, it is doable using SQLResult as described below:</p> 
+     </div> 
+     <div class="listingblock"> 
+      <div class="content"> 
+       <pre class="highlight"><code class="language-Java Java" data-lang="Java">SQLTemplate query = new SQLTemplate(Painting.class, "SELECT ESTIMATED_PRICE P FROM PAINTING");
 
 // let Cayenne know that result is a scalar
 SQLResult resultDescriptor = new SQLResult();
@@ -3000,11 +3024,11 @@ query.setResult(resultDescriptor);
 
 // List of BigDecimals
 List&lt;BigDecimal&gt; prices = context.performQuery(query);</code></pre> 
-       </div> 
       </div> 
-      <div class="listingblock"> 
-       <div class="content"> 
-        <pre class="highlight"><code class="language-Java Java" data-lang="Java">SQLTemplate query = new SQLTemplate(Artist.class, "SELECT t0.ID, t0.NAME, t0.DATE_OF_BIRTH, COUNT(t1.PAINTING_ID) C " +
+     </div> 
+     <div class="listingblock"> 
+      <div class="content"> 
+       <pre class="highlight"><code class="language-Java Java" data-lang="Java">SQLTemplate query = new SQLTemplate(Artist.class, "SELECT t0.ID, t0.NAME, t0.DATE_OF_BIRTH, COUNT(t1.PAINTING_ID) C " +
       "FROM ARTIST t0 LEFT JOIN PAINTING t1 ON (t0.ID = t1.ARTIST_ID) " +
       "GROUP BY t0.ID, t0.NAME, t0.DATE_OF_BIRTH");
 
@@ -3021,14 +3045,14 @@ query.setResult(resultDescriptor);
 
 // List of Object[]
 List&lt;Object[]&gt; data = context.performQuery(query);</code></pre> 
-       </div> 
-      </div> 
-      <div class="paragraph"> 
-       <p>Another trick related to mapping result sets is making Cayenne recognize prefetched entities in the result set. This emulates "joint" prefetching of SelectQuery, and is achieved by special column naming. Columns belonging to the "root" entity of the query should use unqualified names corresponding to the root DbEntity columns. For each related entity column names must be prefixed with relationship name and a dot (e.g. "toArtist.ID"). Column naming can be controlled with "#result" directive:</p> 
       </div> 
-      <div class="listingblock"> 
-       <div class="content"> 
-        <pre class="highlight"><code class="language-Java Java" data-lang="Java">String sql = "SELECT distinct "
+     </div> 
+     <div class="paragraph"> 
+      <p>Another trick related to mapping result sets is making Cayenne recognize prefetched entities in the result set. This emulates "joint" prefetching of SelectQuery, and is achieved by special column naming. Columns belonging to the "root" entity of the query should use unqualified names corresponding to the root DbEntity columns. For each related entity column names must be prefixed with relationship name and a dot (e.g. "toArtist.ID"). Column naming can be controlled with "#result" directive:</p> 
+     </div> 
+     <div class="listingblock"> 
+      <div class="content"> 
+       <pre class="highlight"><code class="language-Java Java" data-lang="Java">String sql = "SELECT distinct "
     + "#result('t1.ESTIMATED_PRICE' 'BigDecimal' '' 'paintings.ESTIMATED_PRICE'), "
     + "#result('t1.PAINTING_TITLE' 'String' '' 'paintings.PAINTING_TITLE'), "
     + "#result('t1.GALLERY_ID' 'int' '' 'paintings.GALLERY_ID'), "
@@ -3042,35 +3066,34 @@ List&lt;Object[]&gt; data = context.performQuery(query);</code></pre>
 SQLTemplate q = new SQLTemplate(Artist.class, sql);
 q.addPrefetch(Artist.PAINTINGS_PROPERTY)
 List&lt;Artist&gt; objects = context.performQuery(query);</code></pre> 
-       </div> 
       </div> 
-      <div class="paragraph"> 
-       <p>And the final tip deals with capitalization of the DataRow keys. Queries like <code>"SELECT * FROM…​"</code> and even <code>"SELECT COLUMN1, COLUMN2, …​ FROM …​"</code> can sometimes result in Cayenne exceptions on attempts to convert fetched DataRows to objects. Essentially any query that is not using a <code>#result</code> directive to describe the result set is prone to this problem, as different databases may produce different capitalization of the java.sql.ResultSet columns.</p> 
-      </div> 
-      <div class="paragraph"> 
-       <p>The most universal way to address this issue is to describe each column explicitly in the SQLTemplate via <code>#result</code>, e.g.: <code>"SELECT #result('column1'), #result('column2'), .."</code>. However this quickly becomes impractical for tables with lots of columns. For such cases Cayenne provides a shortcut based on the fact that an ORM mapping usually follows some naming convention for the column names. Simply put, for case-insensitive databases developers normally use either all lowercase or all uppercase column names. Here is the API that takes advantage of that user knowledge and forces Cayenne to follow a given naming convention for the DataRow keys (this is also available as a dropdown in the Modeler):</p> 
-      </div> 
-      <div class="listingblock"> 
-       <div class="content"> 
-        <pre class="highlight"><code class="language-Java Java" data-lang="Java">SQLTemplate query = new SQLTemplate("SELECT * FROM ARTIST");
+     </div> 
+     <div class="paragraph"> 
+      <p>And the final tip deals with capitalization of the DataRow keys. Queries like <code>"SELECT * FROM…​"</code> and even <code>"SELECT COLUMN1, COLUMN2, …​ FROM …​"</code> can sometimes result in Cayenne exceptions on attempts to convert fetched DataRows to objects. Essentially any query that is not using a <code>#result</code> directive to describe the result set is prone to this problem, as different databases may produce different capitalization of the java.sql.ResultSet columns.</p> 
+     </div> 
+     <div class="paragraph"> 
+      <p>The most universal way to address this issue is to describe each column explicitly in the SQLTemplate via <code>#result</code>, e.g.: <code>"SELECT #result('column1'), #result('column2'), .."</code>. However this quickly becomes impractical for tables with lots of columns. For such cases Cayenne provides a shortcut based on the fact that an ORM mapping usually follows some naming convention for the column names. Simply put, for case-insensitive databases developers normally use either all lowercase or all uppercase column names. Here is the API that takes advantage of that user knowledge and forces Cayenne to follow a given naming convention for the DataRow keys (this is also available as a dropdown in the Modeler):</p> 
+     </div> 
+     <div class="listingblock"> 
+      <div class="content"> 
+       <pre class="highlight"><code class="language-Java Java" data-lang="Java">SQLTemplate query = new SQLTemplate("SELECT * FROM ARTIST");
 query.setColumnNamesCapitalization(CapsStrategy.LOWER);
 List objects = context.performQuery(query);</code></pre> 
-       </div> 
       </div> 
-      <div class="paragraph"> 
-       <p>or</p> 
-      </div> 
-      <div class="listingblock"> 
-       <div class="content"> 
-        <pre class="highlight"><code class="language-Java Java" data-lang="Java">SQLTemplate query = new SQLTemplate("SELECT * FROM ARTIST");
+     </div> 
+     <div class="paragraph"> 
+      <p>or</p> 
+     </div> 
+     <div class="listingblock"> 
+      <div class="content"> 
+       <pre class="highlight"><code class="language-Java Java" data-lang="Java">SQLTemplate query = new SQLTemplate("SELECT * FROM ARTIST");
 query.setColumnNamesCapitalization(CapsStrategy.UPPER);
 List objects = context.performQuery(query);</code></pre> 
-       </div> 
-      </div> 
-      <div class="paragraph"> 
-       <p>None of this affects the generated SQL, but the resulting DataRows are using correct capitalization. Note that you probably shouldn’t bother with this unless you are getting CayenneRuntimeExceptions when fetching with SQLTemplate.</p> 
       </div> 
      </div> 
+     <div class="paragraph"> 
+      <p>None of this affects the generated SQL, but the resulting DataRows are using correct capitalization. Note that you probably shouldn’t bother with this unless you are getting CayenneRuntimeExceptions when fetching with SQLTemplate.</p> 
+     </div> 
     </div> 
    </div> 
   </div> 
@@ -4466,7 +4489,7 @@ ServerRuntime runtime = ServerRuntime.builder()
      </div> 
     </div> 
     <div class="sect4"> 
-     <h5 id="note-2"><a class="anchor" href="#note-2"></a>Note</h5> 
+     <h5 id="note"><a class="anchor" href="#note"></a>Note</h5> 
      <div class="paragraph"> 
       <p>Current version of reverse engineering doesn’t support catalog filtering for Postgres database.</p> 
      </div> 
@@ -4982,7 +5005,7 @@ public class MyEntity extends _MyEntity {
      <p>After any modification of <code>MyEntity</code> objects cache group <code>"some-group"</code> will be dropped from cache automatically.</p> 
     </div> 
     <div class="sect4"> 
-     <h5 id="note-3"><a class="anchor" href="#note-3"></a>Note</h5> 
+     <h5 id="note-2"><a class="anchor" href="#note-2"></a>Note</h5> 
      <div class="paragraph"> 
       <p>You can read more about cache and cache groups in corresponding <a href="#caching">chapter</a> of this documentation.</p> 
      </div> 
@@ -5154,7 +5177,7 @@ public class MyEntity extends _MyEntity {
       </ol> 
      </div> 
      <div class="sect5"> 
-      <h6 id="note-4"><a class="anchor" href="#note-4"></a>Note</h6> 
+      <h6 id="note-3"><a class="anchor" href="#note-3"></a>Note</h6> 
       <div class="paragraph"> 
        <p>Not all data types may be supported by your database.</p> 
       </div> 

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/docs/4.0/getting-started-guide/index.html
----------------------------------------------------------------------
diff --git a/docs/4.0/getting-started-guide/index.html b/docs/4.0/getting-started-guide/index.html
index e87cd75..490fbfd 100644
--- a/docs/4.0/getting-started-guide/index.html
+++ b/docs/4.0/getting-started-guide/index.html
@@ -5,7 +5,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
         <link rel="shortcut icon" href="/favicon.ico" />
         <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-144-precomposed.png" sizes="144x144" />
-        <link rel="stylesheet" href="http://54.84.229.93/css/styles-452af12eaa.css"/>
+        <link rel="stylesheet" href="http://54.84.229.93/css/styles-735ddf3e5f.css"/>
         <script src="http://54.84.229.93/js/bundle-bcaaf59313.js"></script>
         <title>Cayenne Getting Started Guide &middot; Apache Cayenne</title>
     </head>

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/docs/4.0/getting-started-rop/index.html
----------------------------------------------------------------------
diff --git a/docs/4.0/getting-started-rop/index.html b/docs/4.0/getting-started-rop/index.html
index d205fa6..59f52ea 100644
--- a/docs/4.0/getting-started-rop/index.html
+++ b/docs/4.0/getting-started-rop/index.html
@@ -5,7 +5,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
         <link rel="shortcut icon" href="/favicon.ico" />
         <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-144-precomposed.png" sizes="144x144" />
-        <link rel="stylesheet" href="http://54.84.229.93/css/styles-452af12eaa.css"/>
+        <link rel="stylesheet" href="http://54.84.229.93/css/styles-735ddf3e5f.css"/>
         <script src="http://54.84.229.93/js/bundle-bcaaf59313.js"></script>
         <title>Cayenne Getting Started ROP &middot; Apache Cayenne</title>
     </head>

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/docs/4.0/index.html
----------------------------------------------------------------------
diff --git a/docs/4.0/index.html b/docs/4.0/index.html
index e0ce011..0bb52d9 100644
--- a/docs/4.0/index.html
+++ b/docs/4.0/index.html
@@ -5,7 +5,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
         <link rel="shortcut icon" href="/favicon.ico" />
         <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-144-precomposed.png" sizes="144x144" />
-        <link rel="stylesheet" href="http://54.84.229.93/css/styles-452af12eaa.css"/>
+        <link rel="stylesheet" href="http://54.84.229.93/css/styles-735ddf3e5f.css"/>
         <script src="http://54.84.229.93/js/bundle-bcaaf59313.js"></script>
         <title>Apache Cayenne</title>
     </head>

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/docs/4.0/upgrade-guide/index.html
----------------------------------------------------------------------
diff --git a/docs/4.0/upgrade-guide/index.html b/docs/4.0/upgrade-guide/index.html
index 8f09903..81dbe02 100644
--- a/docs/4.0/upgrade-guide/index.html
+++ b/docs/4.0/upgrade-guide/index.html
@@ -5,7 +5,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
         <link rel="shortcut icon" href="/favicon.ico" />
         <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-144-precomposed.png" sizes="144x144" />
-        <link rel="stylesheet" href="http://54.84.229.93/css/styles-452af12eaa.css"/>
+        <link rel="stylesheet" href="http://54.84.229.93/css/styles-735ddf3e5f.css"/>
         <script src="http://54.84.229.93/js/bundle-bcaaf59313.js"></script>
         <title>Guide to 4.0 Features &middot; Apache Cayenne</title>
     </head>

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/docs/4.1/cayenne-guide/index.html
----------------------------------------------------------------------
diff --git a/docs/4.1/cayenne-guide/index.html b/docs/4.1/cayenne-guide/index.html
index c2495a0..d7dfdf8 100644
--- a/docs/4.1/cayenne-guide/index.html
+++ b/docs/4.1/cayenne-guide/index.html
@@ -5,7 +5,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
         <link rel="shortcut icon" href="/favicon.ico" />
         <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-144-precomposed.png" sizes="144x144" />
-        <link rel="stylesheet" href="http://54.84.229.93/css/styles-452af12eaa.css"/>
+        <link rel="stylesheet" href="http://54.84.229.93/css/styles-735ddf3e5f.css"/>
         <script src="http://54.84.229.93/js/bundle-bcaaf59313.js"></script>
         <title>Cayenne Guide &middot; Apache Cayenne</title>
     </head>

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/docs/4.1/getting-started-db-first/index.html
----------------------------------------------------------------------
diff --git a/docs/4.1/getting-started-db-first/index.html b/docs/4.1/getting-started-db-first/index.html
index 99595e9..e2d04b6 100644
--- a/docs/4.1/getting-started-db-first/index.html
+++ b/docs/4.1/getting-started-db-first/index.html
@@ -5,7 +5,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
         <link rel="shortcut icon" href="/favicon.ico" />
         <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-144-precomposed.png" sizes="144x144" />
-        <link rel="stylesheet" href="http://54.84.229.93/css/styles-452af12eaa.css"/>
+        <link rel="stylesheet" href="http://54.84.229.93/css/styles-735ddf3e5f.css"/>
         <script src="http://54.84.229.93/js/bundle-bcaaf59313.js"></script>
         <title>Cayenne Database First tutorial &middot; Apache Cayenne</title>
     </head>

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/docs/4.1/getting-started-guide/index.html
----------------------------------------------------------------------
diff --git a/docs/4.1/getting-started-guide/index.html b/docs/4.1/getting-started-guide/index.html
index 2a55e53..444b1e3 100644
--- a/docs/4.1/getting-started-guide/index.html
+++ b/docs/4.1/getting-started-guide/index.html
@@ -5,7 +5,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
         <link rel="shortcut icon" href="/favicon.ico" />
         <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-144-precomposed.png" sizes="144x144" />
-        <link rel="stylesheet" href="http://54.84.229.93/css/styles-452af12eaa.css"/>
+        <link rel="stylesheet" href="http://54.84.229.93/css/styles-735ddf3e5f.css"/>
         <script src="http://54.84.229.93/js/bundle-bcaaf59313.js"></script>
         <title>Cayenne Getting Started Guide &middot; Apache Cayenne</title>
     </head>

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/docs/4.1/getting-started-rop/index.html
----------------------------------------------------------------------
diff --git a/docs/4.1/getting-started-rop/index.html b/docs/4.1/getting-started-rop/index.html
index 133e20b..e597bf0 100644
--- a/docs/4.1/getting-started-rop/index.html
+++ b/docs/4.1/getting-started-rop/index.html
@@ -5,7 +5,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
         <link rel="shortcut icon" href="/favicon.ico" />
         <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-144-precomposed.png" sizes="144x144" />
-        <link rel="stylesheet" href="http://54.84.229.93/css/styles-452af12eaa.css"/>
+        <link rel="stylesheet" href="http://54.84.229.93/css/styles-735ddf3e5f.css"/>
         <script src="http://54.84.229.93/js/bundle-bcaaf59313.js"></script>
         <title>Cayenne Getting Started ROP &middot; Apache Cayenne</title>
     </head>

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/docs/4.1/index.html
----------------------------------------------------------------------
diff --git a/docs/4.1/index.html b/docs/4.1/index.html
index c6012b4..adf4dcd 100644
--- a/docs/4.1/index.html
+++ b/docs/4.1/index.html
@@ -5,7 +5,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
         <link rel="shortcut icon" href="/favicon.ico" />
         <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-144-precomposed.png" sizes="144x144" />
-        <link rel="stylesheet" href="http://54.84.229.93/css/styles-452af12eaa.css"/>
+        <link rel="stylesheet" href="http://54.84.229.93/css/styles-735ddf3e5f.css"/>
         <script src="http://54.84.229.93/js/bundle-bcaaf59313.js"></script>
         <title>Apache Cayenne</title>
     </head>

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/docs/4.1/upgrade-guide/index.html
----------------------------------------------------------------------
diff --git a/docs/4.1/upgrade-guide/index.html b/docs/4.1/upgrade-guide/index.html
index dac0d31..5118a0a 100644
--- a/docs/4.1/upgrade-guide/index.html
+++ b/docs/4.1/upgrade-guide/index.html
@@ -5,7 +5,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
         <link rel="shortcut icon" href="/favicon.ico" />
         <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-144-precomposed.png" sizes="144x144" />
-        <link rel="stylesheet" href="http://54.84.229.93/css/styles-452af12eaa.css"/>
+        <link rel="stylesheet" href="http://54.84.229.93/css/styles-735ddf3e5f.css"/>
         <script src="http://54.84.229.93/js/bundle-bcaaf59313.js"></script>
         <title>Guide to 4.1 Features &middot; Apache Cayenne</title>
     </head>

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/docs/index.html
----------------------------------------------------------------------
diff --git a/docs/index.html b/docs/index.html
index 44c57b4..9f593e0 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -5,7 +5,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
         <link rel="shortcut icon" href="/favicon.ico" />
         <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-144-precomposed.png" sizes="144x144" />
-        <link rel="stylesheet" href="http://54.84.229.93/css/styles-452af12eaa.css"/>
+        <link rel="stylesheet" href="http://54.84.229.93/css/styles-735ddf3e5f.css"/>
         <script src="http://54.84.229.93/js/bundle-bcaaf59313.js"></script>
         <title>Documentation &middot; Apache Cayenne</title>
     </head>

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/download/index.html
----------------------------------------------------------------------
diff --git a/download/index.html b/download/index.html
index 82f4ad1..2e14ce5 100644
--- a/download/index.html
+++ b/download/index.html
@@ -5,7 +5,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
         <link rel="shortcut icon" href="/favicon.ico" />
         <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-144-precomposed.png" sizes="144x144" />
-        <link rel="stylesheet" href="http://54.84.229.93/css/styles-452af12eaa.css"/>
+        <link rel="stylesheet" href="http://54.84.229.93/css/styles-735ddf3e5f.css"/>
         <script src="http://54.84.229.93/js/bundle-bcaaf59313.js"></script>
         <title>Download &middot; Apache Cayenne</title>
     </head>

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/how-can-i-help.html
----------------------------------------------------------------------
diff --git a/how-can-i-help.html b/how-can-i-help.html
index 6445270..c1aed1b 100644
--- a/how-can-i-help.html
+++ b/how-can-i-help.html
@@ -5,7 +5,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
         <link rel="shortcut icon" href="/favicon.ico" />
         <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-144-precomposed.png" sizes="144x144" />
-        <link rel="stylesheet" href="http://54.84.229.93/css/styles-452af12eaa.css"/>
+        <link rel="stylesheet" href="http://54.84.229.93/css/styles-735ddf3e5f.css"/>
         <script src="http://54.84.229.93/js/bundle-bcaaf59313.js"></script>
         <title>How can I help? &middot; Apache Cayenne</title>
     </head>

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/img/cayenne-modeler1-05838c0edd.png
----------------------------------------------------------------------
diff --git a/img/cayenne-modeler1-05838c0edd.png b/img/cayenne-modeler1-05838c0edd.png
deleted file mode 100644
index e72763e..0000000
Binary files a/img/cayenne-modeler1-05838c0edd.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/img/cayenne-modeler1-43a0aff9d6.png
----------------------------------------------------------------------
diff --git a/img/cayenne-modeler1-43a0aff9d6.png b/img/cayenne-modeler1-43a0aff9d6.png
new file mode 100644
index 0000000..f4053a6
Binary files /dev/null and b/img/cayenne-modeler1-43a0aff9d6.png differ

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/img/crypto-protocol-d2cc175f70.png
----------------------------------------------------------------------
diff --git a/img/crypto-protocol-d2cc175f70.png b/img/crypto-protocol-d2cc175f70.png
deleted file mode 100644
index 78ee517..0000000
Binary files a/img/crypto-protocol-d2cc175f70.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/img/crypto-protocol-efebcfdc5e.png
----------------------------------------------------------------------
diff --git a/img/crypto-protocol-efebcfdc5e.png b/img/crypto-protocol-efebcfdc5e.png
new file mode 100644
index 0000000..fa18623
Binary files /dev/null and b/img/crypto-protocol-efebcfdc5e.png differ

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/89c5e5e0/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index faed064..699d8d5 100644
--- a/index.html
+++ b/index.html
@@ -5,7 +5,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.3">
         <link rel="shortcut icon" href="/favicon.ico" />
         <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-144-precomposed.png" sizes="144x144" />
-        <link rel="stylesheet" href="http://54.84.229.93/css/styles-452af12eaa.css"/>
+        <link rel="stylesheet" href="http://54.84.229.93/css/styles-735ddf3e5f.css"/>
         <script src="http://54.84.229.93/js/bundle-bcaaf59313.js"></script>
         <title>Apache Cayenne</title>
     </head>
@@ -169,7 +169,7 @@
                     <h4>Modeler</h4>
                     <p>Cayenne is distributed with CayenneModeler - a complete GUI mapping tool that supports reverse-engineering of RDBMS schemas, editing object-relational mapping projects, generation of Java source code for the persistent objects and other functions.</p>
                     
-                    <img class="img-fluid  mb-2" src="img/cayenne-modeler1-05838c0edd.png" alt="Cayenne Modeler" />
+                    <img class="img-fluid  mb-2" src="img/cayenne-modeler1-43a0aff9d6.png" alt="Cayenne Modeler" />
 
                 </div>
                 <div class="tab-pane fade" id="db-first-flow" role="tabpanel" aria-labelledby="db-first-flow-tab">
@@ -220,7 +220,7 @@
                     <p>
                          You can designate any number of columns in multiple tables in your model as encrypted, and Cayenne will transparently encrypt and decrypt data with minimal overhead. Default encryption algorithm is AES/CBC/PKCS#5 with 128 or 256-bit key. Other useful features are key revocation, data compression, HMAC signatures.
                     </p>
-                    <img class="img-fluid  mb-2" src="img/crypto-protocol-d2cc175f70.png" alt="Cayenne Crypto Protocol" />
+                    <img class="img-fluid  mb-2" src="img/crypto-protocol-efebcfdc5e.png" alt="Cayenne Crypto Protocol" />
                 </div>
             </div>
         </div>