<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.comp.cms.nuxeo.scm">
    <title>gmane.comp.cms.nuxeo.scm</title>
    <link>http://blog.gmane.org/gmane.comp.cms.nuxeo.scm</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73150"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73149"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73148"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73147"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73146"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73145"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73144"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73143"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73142"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73141"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73140"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73139"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73138"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73137"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73136"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73135"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73134"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73133"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73132"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73131"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73150">
    <title>nuxeo-distribution: NXP-9268: don't call resolverwhen there'snothing to resolve (branch&lt; at &gt;master)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73150</link>
    <description>&lt;pre&gt;Message:
    NXP-9268: don't call resolver when there's nothing to resolve

Repository: nuxeo-distribution
Branch: master
Author: Mathieu Guillaume &amp;lt;mg&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Date: 2012-05-23T14:30:55-07:00
URL: https://github.com/nuxeo/nuxeo-distribution/commit/54dc729b94abfd8e5bd8724d29a711144d878abb
JIRA: https://jira.nuxeo.com/browse/NXP-9268

Files:
M nuxeo-launcher/src/main/java/org/nuxeo/launcher/connect/ConnectBroker.java

diff --git a/nuxeo-launcher/src/main/java/org/nuxeo/launcher/connect/ConnectBroker.java b/nuxeo-launcher/src/main/java/org/nuxeo/launcher/connect/ConnectBroker.java
index 70e4d9f..2b3e82c 100644
--- a/nuxeo-launcher/src/main/java/org/nuxeo/launcher/connect/ConnectBroker.java
+++ b/nuxeo-launcher/src/main/java/org/nuxeo/launcher/connect/ConnectBroker.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -689,40 +689,42 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public boolean pkgRequest(List&amp;lt;String&amp;gt; pkgsToAdd,
         if (pkgsToRemove != null) {
             solverRemove.addAll(pkgsToRemove);
         }
-        DependencyResolution resolution = getPackageManager().resolveDependencies(
-                solverInstall, solverRemove, solverUpgrade, targetPlatform);
-        log.info(resolution);
-        if (resolution.isFailed()) {
-            return false;
-        }
-        // Download remote packages
-        if (!downloadPackages(resolution.getDownloadPackageIds())) {
-            log.error("Aborting packages change request");
-            return false;
-        }
-        // Uninstall packages
-        List&amp;lt;String&amp;gt; packageIds = resolution.getRemovePackageIds();
-        for (String pkgId : packageIds) {
-            if (pkgUninstall(pkgId) == null) {
+        if ((solverInstall.size() != 0) || (solverRemove.size() != 0)
+                || (solverUpgrade.size() != 0)) {
+            DependencyResolution resolution = getPackageManager().resolveDependencies(
+                    solverInstall, solverRemove, solverUpgrade, targetPlatform);
+            log.info(resolution);
+            if (resolution.isFailed()) {
                 return false;
             }
-        }
-        // Remove "pkgsToRemove" packages from local cache
-        if (pkgsToRemove != null) {
-            for (String pkg : pkgsToRemove) {
-                if (pkgRemove(pkg) == null) {
-                    // Don't error out on failed (cache) removal
+            // Download remote packages
+            if (!downloadPackages(resolution.getDownloadPackageIds())) {
+                log.error("Aborting packages change request");
+                return false;
+            }
+            // Uninstall packages
+            List&amp;lt;String&amp;gt; packageIds = resolution.getRemovePackageIds();
+            for (String pkgId : packageIds) {
+                if (pkgUninstall(pkgId) == null) {
+                    return false;
                 }
             }
-        }
-        // Install packages
-        packageIds = resolution.getInstallPackageIds();
-        for (String pkgId : packageIds) {
-            if (pkgInstall(pkgId) == null) {
-                return false;
+            // Remove "pkgsToRemove" packages from local cache
+            if (pkgsToRemove != null) {
+                for (String pkg : pkgsToRemove) {
+                    if (pkgRemove(pkg) == null) {
+                        // Don't error out on failed (cache) removal
+                    }
+                }
+            }
+            // Install packages
+            packageIds = resolution.getInstallPackageIds();
+            for (String pkgId : packageIds) {
+                if (pkgInstall(pkgId) == null) {
+                    return false;
+                }
             }
         }
         return true;
     }
-
 }

_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Mathieu Guillaume</dc:creator>
    <dc:date>2012-05-23T21:31:05</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73149">
    <title>nuxeo-connect: NXP-9268: don't flush cache whenresetting the CU...</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73149</link>
    <description>&lt;pre&gt;Description:
NXP-9268: don't flush cache when resetting the CUDF mapping

Branch: 1.4
Changeset: 116:14114e16d078
User: Mathieu Guillaume &amp;lt;mg-CQNGlVZ5l00AvxtiuMwx3w&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
Date: Wed May 23 23:08:30 2012 +0200
URL: http://hg.nuxeo.org/nuxeo-connect/rev/14114e16d078
JIRA: https://jira.nuxeo.com/browse/NXP-9268

diffstat:

 nuxeo-connect-client/src/main/java/org/nuxeo/connect/packages/dependencies/CUDFHelper.java |  11 ++++-----
 1 files changed, 5 insertions(+), 6 deletions(-)

diffs (55 lines):

diff --git a/nuxeo-connect-client/src/main/java/org/nuxeo/connect/packages/dependencies/CUDFHelper.java b/nuxeo-connect-client/src/main/java/org/nuxeo/connect/packages/dependencies/CUDFHelper.java
--- a/nuxeo-connect-client/src/main/java/org/nuxeo/connect/packages/dependencies/CUDFHelper.java
+++ b/nuxeo-connect-client/src/main/java/org/nuxeo/connect/packages/dependencies/CUDFHelper.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -51,14 +51,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
     /**
      * Map of all NuxeoCUDFPackage per Nuxeo version, per package name
-     *
+     * 
      * nuxeo2CUDFMap = { "pkgName", { nuxeoVersion, NuxeoCUDFPackage }}
      */
     protected Map&amp;lt;String, Map&amp;lt;Version, NuxeoCUDFPackage&amp;gt;&amp;gt; nuxeo2CUDFMap = new HashMap&amp;lt;String, Map&amp;lt;Version, NuxeoCUDFPackage&amp;gt;&amp;gt;();
 
     /**
      * Map of all NuxeoCUDFPackage per CUDF unique ID (pkgName-pkgCUDFVersion)
-     *
+     * 
      * CUDF2NuxeoMap = { "pkgName-pkgCUDFVersion", NuxeoCUDFPackage }
      */
     protected Map&amp;lt;String, NuxeoCUDFPackage&amp;gt; CUDF2NuxeoMap = new HashMap&amp;lt;String, NuxeoCUDFPackage&amp;gt;();
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -71,7 +71,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     }
 
     public void resetMapping() {
-        pm.flushCache();
         nuxeo2CUDFMap.clear();
         CUDF2NuxeoMap.clear();
         initMapping();
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -123,7 +122,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     }
 
     /**
-     *
+     * 
      * &amp;lt; at &amp;gt;param cudfKey in the form "pkgName-pkgCUDFVersion"
      * &amp;lt; at &amp;gt;return NuxeoCUDFPackage corresponding to the given cudfKey
      */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -132,7 +131,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     }
 
     /**
-     *
+     * 
      * &amp;lt; at &amp;gt;param cudfName a package name
      * &amp;lt; at &amp;gt;return all NuxeoCUDFPackage versions corresponding to the given package
      */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -287,7 +286,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
      * TODO NXP-9268 should use results from {&amp;lt; at &amp;gt;link Criteria#NEW},
      * {&amp;lt; at &amp;gt;value Criteria#NOTUPTODATE}, {&amp;lt; at &amp;gt;link Criteria#RECOMMENDED} and
      * {&amp;lt; at &amp;gt;link Criteria#VERSION_CHANGED}
-     *
+     * 
      * &amp;lt; at &amp;gt;param res
      * &amp;lt; at &amp;gt;param details
      * &amp;lt; at &amp;gt;param solution
&lt;/pre&gt;</description>
    <dc:creator>Mathieu Guillaume</dc:creator>
    <dc:date>2012-05-23T21:09:18</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73148">
    <title>nuxeo-connect: NXP-9268: fix package resolution by id</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73148</link>
    <description>&lt;pre&gt;Description:
NXP-9268: fix package resolution by id

Branch: 1.4
Changeset: 114:8d18fa0ab94a
User: Mathieu Guillaume &amp;lt;mg-CQNGlVZ5l00AvxtiuMwx3w&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
Date: Wed May 23 22:29:57 2012 +0200
URL: http://hg.nuxeo.org/nuxeo-connect/rev/8d18fa0ab94a
JIRA: https://jira.nuxeo.com/browse/NXP-9268

diffstat:

 nuxeo-connect-client/src/main/java/org/nuxeo/connect/packages/dependencies/P2CUDFDependencyResolver.java |  19 ++++++++-
 1 files changed, 17 insertions(+), 2 deletions(-)

diffs (44 lines):

diff --git a/nuxeo-connect-client/src/main/java/org/nuxeo/connect/packages/dependencies/P2CUDFDependencyResolver.java b/nuxeo-connect-client/src/main/java/org/nuxeo/connect/packages/dependencies/P2CUDFDependencyResolver.java
--- a/nuxeo-connect-client/src/main/java/org/nuxeo/connect/packages/dependencies/P2CUDFDependencyResolver.java
+++ b/nuxeo-connect-client/src/main/java/org/nuxeo/connect/packages/dependencies/P2CUDFDependencyResolver.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -30,6 +30,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 import org.eclipse.equinox.p2.cudf.solver.ProfileChangeRequest;
 import org.eclipse.equinox.p2.cudf.solver.SimplePlanner;
 import org.eclipse.equinox.p2.cudf.solver.SolverConfiguration;
+import org.nuxeo.connect.data.DownloadablePackage;
 import org.nuxeo.connect.packages.InternalPackageManager;
 import org.nuxeo.connect.update.Package;
 import org.nuxeo.connect.update.PackageDependency;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -37,7 +38,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 /**
  * This implementation uses the p2cudf resolver to solve complex dependencies
- *
+ * 
  * &amp;lt; at &amp;gt;since 1.4
  */
 public class P2CUDFDependencyResolver implements DependencyResolver {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -99,8 +100,22 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         if (pkgList == null || pkgList.size() == 0) {
             return list.toArray(new PackageDependency[0]);
         }
+        List&amp;lt;DownloadablePackage&amp;gt; allPackages = pm.listAllPackages();
         for (String pkgStr : pkgList) {
-            list.add(new PackageDependency(pkgStr));
+            boolean isId = false;
+            if (allPackages != null) {
+                for (DownloadablePackage checkPkg : allPackages) {
+                    if (checkPkg.getId().equals(pkgStr)) {
+                        isId = true;
+                        list.add(new PackageDependency(checkPkg.getName(),
+                                checkPkg.getVersion(), checkPkg.getVersion()));
+                        break;
+                    }
+                }
+            }
+            if (!isId) {
+                list.add(new PackageDependency(pkgStr));
+            }
         }
         return list.toArray(new PackageDependency[list.size()]);
     }
&lt;/pre&gt;</description>
    <dc:creator>Mathieu Guillaume</dc:creator>
    <dc:date>2012-05-23T20:38:05</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73147">
    <title>nuxeo-connect: NXP-9268: adjust cache times</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73147</link>
    <description>&lt;pre&gt;Description:
NXP-9268: adjust cache times

Branch: 1.4
Changeset: 115:3c9737dd44ee
User: Mathieu Guillaume &amp;lt;mg-CQNGlVZ5l00AvxtiuMwx3w&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
Date: Wed May 23 22:37:51 2012 +0200
URL: http://hg.nuxeo.org/nuxeo-connect/rev/3c9737dd44ee
JIRA: https://jira.nuxeo.com/browse/NXP-9268

diffstat:

 nuxeo-connect-client/src/main/java/org/nuxeo/connect/connector/AbstractConnectConnector.java |  53 ++++++---
 1 files changed, 34 insertions(+), 19 deletions(-)

diffs (129 lines):

diff --git a/nuxeo-connect-client/src/main/java/org/nuxeo/connect/connector/AbstractConnectConnector.java b/nuxeo-connect-client/src/main/java/org/nuxeo/connect/connector/AbstractConnectConnector.java
--- a/nuxeo-connect-client/src/main/java/org/nuxeo/connect/connector/AbstractConnectConnector.java
+++ b/nuxeo-connect-client/src/main/java/org/nuxeo/connect/connector/AbstractConnectConnector.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -43,21 +43,26 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 import org.nuxeo.connect.update.PackageType;
 
 /**
- * Base class for {&amp;lt; at &amp;gt;link ConnectConnector} implementers.
- * Provides url binding and marshaling logic.
- *
+ * Base class for {&amp;lt; at &amp;gt;link ConnectConnector} implementers. Provides url binding
+ * and marshaling logic.
+ * 
  * &amp;lt; at &amp;gt;author &amp;lt;a href="mailto:td-CQNGlVZ5l00AvxtiuMwx3w&amp;lt; at &amp;gt;public.gmane.org"&amp;gt;Thierry Delprat&amp;lt;/a&amp;gt;
  */
 public abstract class AbstractConnectConnector implements ConnectConnector {
 
     public static final String GET_DOWNLOADS_SUFFIX = "getDownloads";
+
     public static final String GET_DOWNLOAD_SUFFIX = "getDownload";
+
     public static final String GET_STATUS_SUFFIX = "status";
 
     public static final String NUXEO_TMP_DIR_PROPERTY = "nuxeo.tmp.dir";
 
     public static final String CONNECT_CONNECTOR_CACHE_MINUTES_PROPERTY = "org.nuxeo.connect.connector.cache.duration";
-    public static final long DEFAULT_CACHE_TIME_MS = 24 * 3600 * 1000;
+
+    public static final long DEFAULT_CACHE_TIME_MS = 3600 * 1000;
+
+    public static final long DEFAULT_CACHE_TIME_MS_STUDIO = 300 * 1000;
 
     protected String getBaseUrl() {
         return ConnectUrlConfig.getRegistredBaseUrl();
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -98,12 +103,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         }
     }
 
-    protected ConnectServerResponse execCall(String url) throws ConnectServerError {
+    protected ConnectServerResponse execCall(String url)
+            throws ConnectServerError {
         Map&amp;lt;String, String&amp;gt; headers = SecurityHeaderGenerator.getHeaders();
         return execServerCall(url, headers);
     }
 
-    protected abstract  ConnectServerResponse execServerCall(String url, Map&amp;lt;String, String&amp;gt; headers) throws ConnectServerError;
+    protected abstract ConnectServerResponse execServerCall(String url,
+            Map&amp;lt;String, String&amp;gt; headers) throws ConnectServerError;
 
     public SubscriptionStatus getConnectStatus() throws ConnectServerError {
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -112,14 +119,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         ConnectServerResponse response = execCall(url);
 
         String json = response.getString();
-        if (json==null) {
+        if (json == null) {
             throw new ConnectServerError("null response from server");
         }
         try {
-            return AbstractJSONSerializableData.loadFromJSON(SubscriptionStatus.class, json);
+            return AbstractJSONSerializableData.loadFromJSON(
+                    SubscriptionStatus.class, json);
         } catch (Throwable t) {
-            throw new ConnectServerError("Unable to parse response : " + json , t);
-        }finally {
+            throw new ConnectServerError("Unable to parse response : " + json,
+                    t);
+        } finally {
             response.release();
         }
     }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -139,15 +148,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         String json = response.getString();
 
         try {
-            PackageDescriptor pkg = AbstractJSONSerializableData.loadFromJSON(PackageDescriptor.class, json);
-            if (pkg==null || pkg.getId()==null) {
-                throw new ConnectSecurityError("Unable to parse server response : package has no id");
+            PackageDescriptor pkg = AbstractJSONSerializableData.loadFromJSON(
+                    PackageDescriptor.class, json);
+            if (pkg == null || pkg.getId() == null) {
+                throw new ConnectSecurityError(
+                        "Unable to parse server response : package has no id");
             }
             ConnectDownloadManager cdm = NuxeoConnectClient.getDownloadManager();
             return cdm.storeDownloadedBundle(pkg);
         } catch (Exception e) {
             throw new ConnectServerError("Unable to parse response", e);
-        }finally {
+        } finally {
             response.release();
         }
     }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -166,6 +177,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         } else {
             cacheMaxAge = (long) Long.parseLong(cacheTimeString) * 60 * 1000;
         }
+        if (type == PackageType.STUDIO) {
+            cacheMaxAge = Math.min(cacheMaxAge, DEFAULT_CACHE_TIME_MS_STUDIO);
+        }
 
         File cacheFile = getCacheFileFor(type);
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -193,18 +207,19 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
         // Fallback on the real source
         if (json == null) {
-            String url = getBaseUrl() + GET_DOWNLOADS_SUFFIX + "/" + type.getValue();
+            String url = getBaseUrl() + GET_DOWNLOADS_SUFFIX + "/"
+                    + type.getValue();
             ConnectServerResponse response = execCall(url);
             json = response.getString();
             response.release();
             try {
                 JSONArray array = new JSONArray(json);
-                for (int i = 0; i&amp;lt; array.length(); i++) {
+                for (int i = 0; i &amp;lt; array.length(); i++) {
                     JSONObject ob = (JSONObject) array.get(i);
-                    result.add(AbstractJSONSerializableData.loadFromJSON(PackageDescriptor.class, ob));
+                    result.add(AbstractJSONSerializableData.loadFromJSON(
+                            PackageDescriptor.class, ob));
                 }
-            }
-            catch (JSONException e) {
+            } catch (JSONException e) {
                 throw new ConnectServerError("Unable to parse response", e);
             }
             // Parsing went OK, we cache the result
&lt;/pre&gt;</description>
    <dc:creator>Mathieu Guillaume</dc:creator>
    <dc:date>2012-05-23T20:38:05</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73146">
    <title>nuxeo-distribution: NXP-9268: add mp-update command(branch&lt; at &gt;master)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73146</link>
    <description>&lt;pre&gt;Message:
    NXP-9268: add mp-update command

Repository: nuxeo-distribution
Branch: master
Author: Mathieu Guillaume &amp;lt;mg&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Date: 2012-05-23T10:06:23-07:00
URL: https://github.com/nuxeo/nuxeo-distribution/commit/4ddbcb4989b74f6c50bce3b57acd943e2ee2b587
JIRA: https://jira.nuxeo.com/browse/NXP-9268

Files:
M nuxeo-launcher/src/main/java/org/nuxeo/launcher/NuxeoLauncher.java
M nuxeo-launcher/src/main/java/org/nuxeo/launcher/connect/ConnectBroker.java

diff --git a/nuxeo-launcher/src/main/java/org/nuxeo/launcher/NuxeoLauncher.java b/nuxeo-launcher/src/main/java/org/nuxeo/launcher/NuxeoLauncher.java
index 905d2b5..b9961bd 100644
--- a/nuxeo-launcher/src/main/java/org/nuxeo/launcher/NuxeoLauncher.java
+++ b/nuxeo-launcher/src/main/java/org/nuxeo/launcher/NuxeoLauncher.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -728,6 +728,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public void run() {
             }
         } else if ("mp-reset".equalsIgnoreCase(launcher.command)) {
             commandSucceeded = launcher.pkgReset();
+        } else if ("mp-update".equalsIgnoreCase(launcher.command)) {
+            commandSucceeded = launcher.pkgRefreshCache();
         } else if ("showconf".equalsIgnoreCase(launcher.command)) {
             commandSucceeded = launcher.showConfig();
         } else {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1512,6 +1514,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public static void printLongHelp() {
         log.error("\tpack &amp;lt;target&amp;gt;\t\tBuild a static archive. Same as the \"pack\" Shell script.");
         log.error("\tshowconf\t\tDisplay the instance configuration.");
         log.error("\tmp-list\t\t\tList marketplace packages.");
+        log.error("\tmp-update\t\tUpdate cache of marketplace packages list.");
         log.error("\tmp-add\t\t\tAdd marketplace package(s) to local cache. You must provide the package file(s) as parameter.");
         log.error("\tmp-install\t\tRun marketplace package installation. "
                 + "It is automatically called at startup if installAfterRestart.log exists. "
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1873,4 +1876,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; protected boolean pkgRequest(List&amp;lt;String&amp;gt; pkgsToAdd,
         return cmdOK;
     }
 
+    /**
+     * Update the cached list of remote packages
+     * 
+     * &amp;lt; at &amp;gt;since 5.6
+     * &amp;lt; at &amp;gt;return true
+     * &amp;lt; at &amp;gt;throws IOException
+     * &amp;lt; at &amp;gt;throws PackageException
+     */
+    protected boolean pkgRefreshCache() throws IOException, PackageException {
+        ConnectBroker pkgman = getConnectBroker();
+        pkgman.refreshCache();
+        return true;
+    }
+
 }
diff --git a/nuxeo-launcher/src/main/java/org/nuxeo/launcher/connect/ConnectBroker.java b/nuxeo-launcher/src/main/java/org/nuxeo/launcher/connect/ConnectBroker.java
index 87b5f1a..70e4d9f 100644
--- a/nuxeo-launcher/src/main/java/org/nuxeo/launcher/connect/ConnectBroker.java
+++ b/nuxeo-launcher/src/main/java/org/nuxeo/launcher/connect/ConnectBroker.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -90,6 +90,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public PackageManager getPackageManager() {
         return NuxeoConnectClient.getPackageManager();
     }
 
+    public void refreshCache() {
+        getPackageManager().flushCache();
+        NuxeoConnectClient.getPackageManager().listAllPackages();
+    }
+
     public CommandSetInfo getCommandSet() {
         return cset;
     }

tPackageManage_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Mathieu Guillaume</dc:creator>
    <dc:date>2012-05-23T17:06:30</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73145">
    <title>nuxeo-connect: NXP-9268: add disk cache for Connectconnectors</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73145</link>
    <description>&lt;pre&gt;Description:
NXP-9268: add disk cache for Connect connectors

Branch: 1.4
Changeset: 113:c67da817c73f
User: Mathieu Guillaume &amp;lt;mg-CQNGlVZ5l00AvxtiuMwx3w&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
Date: Wed May 23 19:04:26 2012 +0200
URL: http://hg.nuxeo.org/nuxeo-connect/rev/c67da817c73f
JIRA: https://jira.nuxeo.com/browse/NXP-9268

diffstat:

 nuxeo-connect-client/src/main/java/org/nuxeo/connect/connector/AbstractConnectConnector.java |  125 ++++++++-
 nuxeo-connect-client/src/main/java/org/nuxeo/connect/connector/ConnectConnector.java         |   14 +-
 nuxeo-connect-client/src/main/java/org/nuxeo/connect/packages/RemotePackageSource.java       |    4 +
 nuxeo-connect-client/src/test/java/org/nuxeo/connect/connector/test/TestFakeConnector.java   |    4 +-
 nuxeo-connect-client/src/test/java/org/nuxeo/connect/tests/TestService.java                  |    3 +-
 5 files changed, 119 insertions(+), 31 deletions(-)

diffs (271 lines):

diff --git a/nuxeo-connect-client/src/main/java/org/nuxeo/connect/connector/AbstractConnectConnector.java b/nuxeo-connect-client/src/main/java/org/nuxeo/connect/connector/AbstractConnectConnector.java
--- a/nuxeo-connect-client/src/main/java/org/nuxeo/connect/connector/AbstractConnectConnector.java
+++ b/nuxeo-connect-client/src/main/java/org/nuxeo/connect/connector/AbstractConnectConnector.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,5 +1,5 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 /*
- * (C) Copyright 2006-2009 Nuxeo SAS (http://nuxeo.com/) and contributors.
+ * (C) Copyright 2006-2012 Nuxeo SA (http://nuxeo.com/) and contributors.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the GNU Lesser General Public License
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -13,17 +13,21 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
  *
  * Contributors:
  *     Nuxeo - initial API and implementation
- *
- * $Id$
  */
 
 package org.nuxeo.connect.connector;
 
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.net.URLEncoder;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.io.FileUtils;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -50,10 +54,50 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     public static final String GET_DOWNLOAD_SUFFIX = "getDownload";
     public static final String GET_STATUS_SUFFIX = "status";
 
+    public static final String NUXEO_TMP_DIR_PROPERTY = "nuxeo.tmp.dir";
+
+    public static final String CONNECT_CONNECTOR_CACHE_MINUTES_PROPERTY = "org.nuxeo.connect.connector.cache.duration";
+    public static final long DEFAULT_CACHE_TIME_MS = 24 * 3600 * 1000;
+
     protected String getBaseUrl() {
         return ConnectUrlConfig.getRegistredBaseUrl();
     }
 
+    protected File getCacheFileFor(PackageType type) {
+        String connectUrlString = ConnectUrlConfig.getBaseUrl();
+        String cacheDir = NuxeoConnectClient.getProperty(
+                NUXEO_TMP_DIR_PROPERTY, System.getProperty("java.io.tmpdir"));
+        try {
+            URL connectUrl = new URL(connectUrlString);
+            String cachePrefix = connectUrl.getHost() + "_";
+            int port = connectUrl.getPort();
+            if (port == -1) {
+                port = connectUrl.getDefaultPort();
+            }
+            if (port == -1) {
+                cachePrefix = cachePrefix + "00_";
+            } else {
+                cachePrefix = cachePrefix + Integer.toString(port) + "_";
+            }
+            cachePrefix = cachePrefix
+                    + connectUrl.getPath().replaceAll("/", "#");
+            String cacheFileName = cachePrefix + "_" + type.toString()
+                    + ".json";
+            return new File(cacheDir, cacheFileName);
+        } catch (MalformedURLException e) {
+            String fallbackFileName = connectUrlString + "_" + type.toString()
+                    + ".json";
+            return new File(cacheDir, fallbackFileName);
+        }
+    }
+
+    public void flushCache() {
+        for (PackageType type : PackageType.values()) {
+            File cacheFile = getCacheFileFor(type);
+            FileUtils.deleteQuietly(cacheFile);
+        }
+    }
+
     protected ConnectServerResponse execCall(String url) throws ConnectServerError {
         Map&amp;lt;String, String&amp;gt; headers = SecurityHeaderGenerator.getHeaders();
         return execServerCall(url, headers);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -112,27 +156,66 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
             throws ConnectServerError {
 
         List&amp;lt;DownloadablePackage&amp;gt; result = new ArrayList&amp;lt;DownloadablePackage&amp;gt;();
+        String json = null;
 
-        String url = getBaseUrl() + GET_DOWNLOADS_SUFFIX + "/" + type.getValue();
-        ConnectServerResponse response = execCall(url);
-
-        String json = response.getString();
-
-        try {
-            JSONArray array = new JSONArray(json);
-            for (int i = 0; i&amp;lt; array.length(); i++) {
-                JSONObject ob = (JSONObject) array.get(i);
-                result.add(AbstractJSONSerializableData.loadFromJSON(PackageDescriptor.class, ob));
-            }
-            return result;
-        }
-        catch (JSONException e) {
-            throw new ConnectServerError("Unable to parse response", e);
-        }
-        finally {
-            response.release();
+        String cacheTimeString = NuxeoConnectClient.getProperty(
+                CONNECT_CONNECTOR_CACHE_MINUTES_PROPERTY, null);
+        long cacheMaxAge;
+        if (cacheTimeString == null) {
+            cacheMaxAge = DEFAULT_CACHE_TIME_MS;
+        } else {
+            cacheMaxAge = (long) Long.parseLong(cacheTimeString) * 60 * 1000;
         }
 
+        File cacheFile = getCacheFileFor(type);
+
+        // Try reading from the cache first
+        Date NOW = new Date();
+        if (cacheFile.exists()
+                &amp;amp;&amp;amp; ((NOW.getTime() - cacheFile.lastModified()) &amp;lt; cacheMaxAge)) {
+            try {
+                json = FileUtils.readFileToString(cacheFile);
+                JSONArray array = new JSONArray(json);
+                for (int i = 0; i &amp;lt; array.length(); i++) {
+                    JSONObject ob = (JSONObject) array.get(i);
+                    result.add(AbstractJSONSerializableData.loadFromJSON(
+                            PackageDescriptor.class, ob));
+                }
+            } catch (IOException e) {
+                // Issue reading the file
+                json = null;
+            } catch (JSONException e) {
+                // Issue parsing the file
+                json = null;
+                result = new ArrayList&amp;lt;DownloadablePackage&amp;gt;();
+            }
+        }
+
+        // Fallback on the real source
+        if (json == null) {
+            String url = getBaseUrl() + GET_DOWNLOADS_SUFFIX + "/" + type.getValue();
+            ConnectServerResponse response = execCall(url);
+            json = response.getString();
+            response.release();
+            try {
+                JSONArray array = new JSONArray(json);
+                for (int i = 0; i&amp;lt; array.length(); i++) {
+                    JSONObject ob = (JSONObject) array.get(i);
+                    result.add(AbstractJSONSerializableData.loadFromJSON(PackageDescriptor.class, ob));
+                }
+            }
+            catch (JSONException e) {
+                throw new ConnectServerError("Unable to parse response", e);
+            }
+            // Parsing went OK, we cache the result
+            try {
+                FileUtils.writeStringToFile(cacheFile, json);
+            } catch (IOException e) {
+                // Can't cache - ignore
+            }
+        }
+
+        return result;
     }
 
 }
diff --git a/nuxeo-connect-client/src/main/java/org/nuxeo/connect/connector/ConnectConnector.java b/nuxeo-connect-client/src/main/java/org/nuxeo/connect/connector/ConnectConnector.java
--- a/nuxeo-connect-client/src/main/java/org/nuxeo/connect/connector/ConnectConnector.java
+++ b/nuxeo-connect-client/src/main/java/org/nuxeo/connect/connector/ConnectConnector.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,5 +1,5 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 /*
- * (C) Copyright 2006-2009 Nuxeo SAS (http://nuxeo.com/) and contributors.
+ * (C) Copyright 2006-2012 Nuxeo SA (http://nuxeo.com/) and contributors.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the GNU Lesser General Public License
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -13,8 +13,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
  *
  * Contributors:
  *     Nuxeo - initial API and implementation
- *
- * $Id$
  */
 package org.nuxeo.connect.connector;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -26,10 +24,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 import org.nuxeo.connect.update.PackageType;
 
 /**
-* Interface for APIs exposed by the Connect Server.
-*
-* &amp;lt; at &amp;gt;author &amp;lt;a href="mailto:td-CQNGlVZ5l00AvxtiuMwx3w&amp;lt; at &amp;gt;public.gmane.org"&amp;gt;Thierry Delprat&amp;lt;/a&amp;gt;
-*/
+ * Interface for APIs exposed by the Connect Server.
+ *
+ * &amp;lt; at &amp;gt;author &amp;lt;a href="mailto:td-CQNGlVZ5l00AvxtiuMwx3w&amp;lt; at &amp;gt;public.gmane.org"&amp;gt;Thierry Delprat&amp;lt;/a&amp;gt;
+ */
 public interface ConnectConnector {
 
     List&amp;lt;DownloadablePackage&amp;gt; getDownloads(PackageType type) throws ConnectServerError;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -38,4 +36,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
     SubscriptionStatus getConnectStatus() throws ConnectServerError;
 
+    void flushCache();
+
 }
diff --git a/nuxeo-connect-client/src/main/java/org/nuxeo/connect/packages/RemotePackageSource.java b/nuxeo-connect-client/src/main/java/org/nuxeo/connect/packages/RemotePackageSource.java
--- a/nuxeo-connect-client/src/main/java/org/nuxeo/connect/packages/RemotePackageSource.java
+++ b/nuxeo-connect-client/src/main/java/org/nuxeo/connect/packages/RemotePackageSource.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -83,7 +83,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     }
 
     public void flushCache() {
+        // memory cache
         cache = new PackageListCache();
+        // disk cache
+        ConnectRegistrationService crs = NuxeoConnectClient.getConnectRegistrationService();
+        crs.getConnector().flushCache();
     }
 
 }
diff --git a/nuxeo-connect-client/src/test/java/org/nuxeo/connect/connector/test/TestFakeConnector.java b/nuxeo-connect-client/src/test/java/org/nuxeo/connect/connector/test/TestFakeConnector.java
--- a/nuxeo-connect-client/src/test/java/org/nuxeo/connect/connector/test/TestFakeConnector.java
+++ b/nuxeo-connect-client/src/test/java/org/nuxeo/connect/connector/test/TestFakeConnector.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,5 +1,5 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 /*
- * (C) Copyright 2006-2009 Nuxeo SAS (http://nuxeo.com/) and contributors.
+ * (C) Copyright 2006-2012 Nuxeo SA (http://nuxeo.com/) and contributors.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the GNU Lesser General Public License
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -30,13 +30,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 public class TestFakeConnector extends TestCase {
 
-
     public void testFakeConnector() throws Exception {
 
         LogicalInstanceIdentifier CLID = new LogicalInstanceIdentifier("toto--titi", "myInstance");
         CLID.save();
 
         ConnectConnector connector = new ConnectTestConnector();
+        connector.flushCache();
 
         SubscriptionStatus status = connector.getConnectStatus();
         assertNotNull(status);
diff --git a/nuxeo-connect-client/src/test/java/org/nuxeo/connect/tests/TestService.java b/nuxeo-connect-client/src/test/java/org/nuxeo/connect/tests/TestService.java
--- a/nuxeo-connect-client/src/test/java/org/nuxeo/connect/tests/TestService.java
+++ b/nuxeo-connect-client/src/test/java/org/nuxeo/connect/tests/TestService.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -54,7 +54,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         assertNotNull(connector);
     }
 
-    public void testServiceAsUnresistred() {
+    public void testServiceAsUnregistered() {
         ConnectRegistrationService crs = NuxeoConnectClient.getConnectRegistrationService();
 
         assertFalse(crs.isInstanceRegistred());
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -107,6 +107,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         crs.localRegisterInstance("toto--titi", "my test server");
 
         ConnectGatewayComponent.testConnector = new ConnectTestConnector();
+        ConnectGatewayComponent.testConnector.flushCache();
 
         List&amp;lt;DownloadablePackage&amp;gt; pkgs = pm.listPackages();
&lt;/pre&gt;</description>
    <dc:creator>Mathieu Guillaume</dc:creator>
    <dc:date>2012-05-23T17:04:50</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73144">
    <title>nuxeo-social-collaboration: NXP-9155: refactor clickevents handler(branch&lt; at &gt;NXP-9155-improve-library-gadget)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73144</link>
    <description>&lt;pre&gt;Message:
    NXP-9155: refactor click events handler

Repository: nuxeo-social-collaboration
Branch: NXP-9155-improve-library-gadget
Author: Vladimir Pasquier &amp;lt;vpasquier&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Date: 2012-05-23T09:23:48-07:00
URL: https://github.com/nuxeo/nuxeo-social-collaboration/commit/3ffb8e612e025a2b4836d720f35346691ca3efc8
JIRA: https://jira.nuxeo.com/browse/NXP-9155

Files:
M nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
M nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl

diff --git a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
index 94373af..0ccb126 100755
--- a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
+++ b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -319,4 +319,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; Library.docLike = function (docRef) {
 //Rerender document like number area
 Library.addLikeUI = function (response, status, jqXHR) {
     $("a#like_" + jqXHR.getResponseHeader("docRef")).text(response);
+}
+
+// Handle Link click event
+Library.handleLinkClick = function(controller, divId){
+var element = controller;
+    var id = element.attr("id");
+    $(divId + id).slideToggle(300);
+    $(divId + id).style.display = true;
+    return false;
 }
\ No newline at end of file
diff --git a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl
index 898e0eb..c94104a 100755
--- a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl
+++ b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -22,33 +22,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; $(document).ready(function () {
     // Activate comment box toggles
     // All comments display handler
     $(".comment_display_button").click(function () {
-        var element = $(this);
-        var id = element.attr("id");
-        $("#display_" + id).slideToggle(300);
-        // Switch Show/Hide Comments label
-        if ($(this).text().startsWith("Show")) {
-            $(this).text("Hide ${comments?size} Comments");
-        } else {
-            $(this).text("Show ${comments?size} Comments");
-        }
-        $("#display_" + id).style.display = true;
-        return false;
+        Library.handleLinkClick($(this), "#display_");
     });
     // 'Comment' display handler
     $(".root_comment_button").click(function () {
-        var element = $(this);
-        var id = element.attr("id");
-        $("#box_comment_" + id).slideToggle(300);
-        $("#box_comment_" + id).style.display = true;
-        return false;
+        Library.handleLinkClick($(this), "#box_comment_");
     });
     // 'Answer' display handler
     $(".comment_button").click(function () {
-        var element = $(this);
-        var id = element.attr("id");
-        $("#box_" + id).slideToggle(300);
-        $("#box_" + id).style.display = true;
-        return false;
+        Library.handleLinkClick($(this), "#box_");
     });
 });
 &amp;lt;/script&amp;gt;
\ No newline at end of file

_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Vladimir Pasquier</dc:creator>
    <dc:date>2012-05-23T16:48:36</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73143">
    <title>nuxeo-social-collaboration: NXP-9155: fix commentdisplay link renderif no thread(branch&lt; at &gt;NXP-9155-improve-library-gadget)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73143</link>
    <description>&lt;pre&gt;Message:
    NXP-9155: fix comment display link render if no thread

Repository: nuxeo-social-collaboration
Branch: NXP-9155-improve-library-gadget
Author: Vladimir Pasquier &amp;lt;vpasquier&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Date: 2012-05-23T09:48:06-07:00
URL: https://github.com/nuxeo/nuxeo-social-collaboration/commit/66e7742b90e7623daead70eaf695a576f9ee743b
JIRA: https://jira.nuxeo.com/browse/NXP-9155

Files:
M nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
M nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl

diff --git a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
index a7c54d6..51c88a1 100755
--- a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
+++ b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -291,6 +291,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; Library.addNewUIComment = function (response, status, jqXHR) {
         var id = jqXHR.getResponseHeader("docRef");
         // Rerender new comment
         $("#comments_list_" + id).append(response);
+        // Display comments list if first thread
+        $(".comment_display_button").show();
         // Display comments if not
         $("#display_" + id).slideToggle(300);
         // Close comment box
diff --git a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl
index 4ce7636..0a4ab84 100755
--- a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl
+++ b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -19,6 +19,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 &amp;lt;/tr&amp;gt;
 &amp;lt;script type="text/javascript"&amp;gt;
 $(document).ready(function () {
+    // Init comment display link
+    if(${comments?size}==0){
+        $(".comment_display_button").hide();
+    }
     // Activate comment box toggles
     // All comments display handler
     $(".comment_display_button").click(function () {

L3NraW4vdm_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Vladimir Pasquier</dc:creator>
    <dc:date>2012-05-23T16:48:38</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73142">
    <title>nuxeo-social-collaboration:format(branch&lt; at &gt;NXP-9155-improve-library-gadget)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73142</link>
    <description>&lt;pre&gt;Message:
    format

Repository: nuxeo-social-collaboration
Branch: NXP-9155-improve-library-gadget
Author: Vladimir Pasquier &amp;lt;vpasquier&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Date: 2012-05-23T09:06:08-07:00
URL: https://github.com/nuxeo/nuxeo-social-collaboration/commit/cbfa4b2034c619f3126d9c481b90cabbe20039e9

Files:
M nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl

diff --git a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl
index b58f938..898e0eb 100755
--- a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl
+++ b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -18,31 +18,37 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   &amp;lt;/td&amp;gt;
 &amp;lt;/tr&amp;gt;
 &amp;lt;script type="text/javascript"&amp;gt;
-    $(document).ready(function()
-      {
-        // Activate comment box toggles
-        // All comments display handler
-        $(".comment_display_button").click(function(){
-          var element = $(this);
-          var id = element.attr("id");
-          $("#display_"+id).slideToggle(300);
-          $("#display_"+id).style.display = true;
-          return false;
-        });
-        // 'Comment' display handler
-        $(".root_comment_button").click(function(){
-          var element = $(this);
-          var id = element.attr("id");
-          $("#box_comment_"+id).slideToggle(300);
-          $("#box_comment_"+id).style.display = true;
-          return false;
-        });
-        // 'Answer' display handler
-        $(".comment_button").click(function(){
-          var element = $(this);
-          var id = element.attr("id");
-          $("#box_"+id).slideToggle(300);
-          $("#box_"+id).style.display = true;
-          return false;
-        });});
+$(document).ready(function () {
+    // Activate comment box toggles
+    // All comments display handler
+    $(".comment_display_button").click(function () {
+        var element = $(this);
+        var id = element.attr("id");
+        $("#display_" + id).slideToggle(300);
+        // Switch Show/Hide Comments label
+        if ($(this).text().startsWith("Show")) {
+            $(this).text("Hide ${comments?size} Comments");
+        } else {
+            $(this).text("Show ${comments?size} Comments");
+        }
+        $("#display_" + id).style.display = true;
+        return false;
+    });
+    // 'Comment' display handler
+    $(".root_comment_button").click(function () {
+        var element = $(this);
+        var id = element.attr("id");
+        $("#box_comment_" + id).slideToggle(300);
+        $("#box_comment_" + id).style.display = true;
+        return false;
+    });
+    // 'Answer' display handler
+    $(".comment_button").click(function () {
+        var element = $(this);
+        var id = element.attr("id");
+        $("#box_" + id).slideToggle(300);
+        $("#box_" + id).style.display = true;
+        return false;
+    });
+});
 &amp;lt;/script&amp;gt;
\ No newline at end of file

lica_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Vladimir Pasquier</dc:creator>
    <dc:date>2012-05-23T16:48:35</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73141">
    <title>nuxeo-social-collaboration: NXP-9155: comment boxesdisplay handle(branch&lt; at &gt;NXP-9155-improve-library-gadget)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73141</link>
    <description>&lt;pre&gt;Message:
    NXP-9155: comment boxes display handle

Repository: nuxeo-social-collaboration
Branch: NXP-9155-improve-library-gadget
Author: Vladimir Pasquier &amp;lt;vpasquier&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Date: 2012-05-23T09:04:42-07:00
URL: https://github.com/nuxeo/nuxeo-social-collaboration/commit/f8877e4fd7e1cadb62f9947715b3cd1f2ce16909
JIRA: https://jira.nuxeo.com/browse/NXP-9155

Files:
M nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
M nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl

diff --git a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
index be0e2f0..94373af 100755
--- a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
+++ b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -280,13 +280,21 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; Library.addComment = function (docToCommentRef, commentContent, commentParentRef
 //Rerender current document comments
 Library.addNewUIComment = function (response, status, jqXHR) {
     // set new ui comment depending if an answer or a thread
-    var parentCommentRef = jqXHR.getResponseHeader("parentCommentRef")
+    var parentCommentRef = jqXHR.getResponseHeader("parentCommentRef");
     if (parentCommentRef != null) {
         //Answer
         $("tr." + parentCommentRef).after(response);
+        // Close comment box
+        $("#box_" + parentCommentRef).slideToggle(300);
     } else {
         //Thread
-        $("#comments_list_" + jqXHR.getResponseHeader("docRef")).append(response);
+        var id = jqXHR.getResponseHeader("docRef");
+        // Rerender new comment
+        $("#comments_list_" + id).append(response);
+        // Display comments if not
+        $("#display_" + id).slideToggle(300);
+        // Close comment box
+        $("#box_comment_" + id).slideToggle(300);
     }
 }
 
diff --git a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl
index 63d5008..b58f938 100755
--- a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl
+++ b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -8,7 +8,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         &amp;lt;textarea id="rootCommentContent_${doc.id}" style="width:390px;height:23px; border:1px solid #999999;"&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;br/&amp;gt;
         &amp;lt;input type="button" value="Comment" onclick="Library.addComment('${doc.id}','#rootCommentContent_${doc.id}')"/&amp;gt;
     &amp;lt;/div&amp;gt;
-    &amp;lt;div id="${doc.id}_display" style="display:none"&amp;gt;
+    &amp;lt;div id="display_${doc.id}" style="display:none"&amp;gt;
       &amp;lt;table id="comments_list_${doc.id}" class="dataList"&amp;gt;
         &amp;lt;#list comments as comment&amp;gt;
           &amp;lt;#include "&amp;lt; at &amp;gt;bricks/document_comments"&amp;gt;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -25,8 +25,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         $(".comment_display_button").click(function(){
           var element = $(this);
           var id = element.attr("id");
-          $("#"+id+"_display").slideToggle(300);
-          $("#"+id+"_display").style.display = true;
+          $("#display_"+id).slideToggle(300);
+          $("#display_"+id).style.display = true;
           return false;
         });
         // 'Comment' display handler

_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Vladimir Pasquier</dc:creator>
    <dc:date>2012-05-23T16:48:34</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73140">
    <title>nuxeo-social-collaboration: NXP-9155: Handle commentdisplay linkrender (branch&lt; at &gt;NXP-9155-improve-library-gadget)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73140</link>
    <description>&lt;pre&gt;Message:
    NXP-9155: Handle comment display link render

Repository: nuxeo-social-collaboration
Branch: NXP-9155-improve-library-gadget
Author: Vladimir Pasquier &amp;lt;vpasquier&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Date: 2012-05-23T09:37:04-07:00
URL: https://github.com/nuxeo/nuxeo-social-collaboration/commit/ac6aec234dd857e1c447558db2de29c5efec92cb
JIRA: https://jira.nuxeo.com/browse/NXP-9155

Files:
M nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
M nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl

diff --git a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
index 0ccb126..a7c54d6 100755
--- a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
+++ b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/resources/script/library.js
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -322,10 +322,26 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; Library.addLikeUI = function (response, status, jqXHR) {
 }
 
 // Handle Link click event
-Library.handleLinkClick = function(controller, divId){
-var element = controller;
+Library.handleLinkClick = function (controller, divId) {
+    var element = controller;
     var id = element.attr("id");
     $(divId + id).slideToggle(300);
     $(divId + id).style.display = true;
     return false;
+}
+
+//Utils String function "startsWith"
+if (typeof String.prototype.startsWith != 'function') {
+    String.prototype.startsWith = function (str) {
+        return this.indexOf(str) == 0;
+    };
+}
+
+// Switch Show/Hide Comments label
+Library.commentsDisplayHandler = function (controller, nbComments) {
+    if (controller.text().startsWith("Show")) {
+        controller.text("Hide " + nbComments + " Comments");
+    } else {
+        controller.text("Show " + nbComments + " Comments");
+    }
 }
\ No newline at end of file
diff --git a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl
index c94104a..4ce7636 100755
--- a/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl
+++ b/nuxeo-social-workspace/nuxeo-social-workspace-gadgets/src/main/resources/skin/views/social/document_comments_template.ftl
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -22,10 +22,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; $(document).ready(function () {
     // Activate comment box toggles
     // All comments display handler
     $(".comment_display_button").click(function () {
+        Library.commentsDisplayHandler($(this), ${comments?size});
         Library.handleLinkClick($(this), "#display_");
     });
     // 'Comment' display handler
     $(".root_comment_button").click(function () {
+        Library.commentsDisplayHandler($(".comment_display_button"), ${comments?size});
         Library.handleLinkClick($(this), "#box_comment_");
     });
     // 'Answer' display handler

splay handler
  _______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Vladimir Pasquier</dc:creator>
    <dc:date>2012-05-23T16:48:37</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73139">
    <title>nuxeo-core: NXP-9361 move only temporary files,copy file if not on same filesystem (branch&lt; at &gt;5.5.0)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73139</link>
    <description>&lt;pre&gt;Message:
    NXP-9361 move only temporary files, copy file if not on same filesystem

Repository: nuxeo-core
Branch: 5.5.0
Author: Stephane Lacoin &amp;lt;slacoin&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Date: 2012-05-23T09:22:06-07:00
URL: https://github.com/nuxeo/nuxeo-core/commit/d896897b05c139d098e7b5f654c00eaf7d5eddde
JIRA: https://jira.nuxeo.com/browse/NXP-9361

Files:
M nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/blob/StreamingBlob.java
M nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/DefaultBinaryManager.java
M nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/coremodel/SQLSession.java

diff --git a/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/blob/StreamingBlob.java b/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/blob/StreamingBlob.java
index 82d7a9c..e80507f 100644
--- a/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/blob/StreamingBlob.java
+++ b/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/blob/StreamingBlob.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -187,7 +187,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public Blob persist() throws IOException {
             try {
                 persistedTmpFile = File.createTempFile(
                         "NXCore-persisted-StreamingBlob-", ".tmp");
-                persistedTmpFile.deleteOnExit();
                 in = src.getStream();
                 out = new FileOutputStream(persistedTmpFile);
                 copy(in, out);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -201,6 +200,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public Blob persist() throws IOException {
         return this;
     }
 
+    public boolean isTemporary() {
+        return persistedTmpFile != null;
+    }
+
     private void writeObject(ObjectOutputStream out) throws IOException {
         out.defaultWriteObject();
         long len = src.getLength();
diff --git a/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/DefaultBinaryManager.java b/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/DefaultBinaryManager.java
index 6d415df..9459335 100644
--- a/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/DefaultBinaryManager.java
+++ b/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/DefaultBinaryManager.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -26,6 +26,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.nuxeo.common.Environment;
+import org.nuxeo.common.utils.FileUtils;
 import org.nuxeo.common.xmap.XMap;
 import org.nuxeo.runtime.api.Framework;
 import org.nuxeo.runtime.services.streaming.FileSource;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -224,7 +225,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; protected String storeAndDigest(FileSource source)  throws IOException {
             out.close();
         }
         File  digestFile = getFileForDigest(digest, true);
-        sourceFile.renameTo(digestFile);
+        if (!sourceFile.renameTo(digestFile)) {
+            FileUtils.copy(sourceFile, digestFile);
+            sourceFile.delete();
+        }
         source.setFile(digestFile);
         return digest;
     }
diff --git a/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/coremodel/SQLSession.java b/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/coremodel/SQLSession.java
index 7ea4352..087a93f 100644
--- a/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/coremodel/SQLSession.java
+++ b/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/coremodel/SQLSession.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1113,8 +1113,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public Binary getBinary(Blob blob) throws DocumentException {
         StreamSource source;
         try {
             if (blob instanceof StreamingBlob) {
-                source = ((StreamingBlob) blob).getStreamSource();
-                if (source instanceof FileSource) {
+                StreamingBlob sb = (StreamingBlob) blob;
+                source = sb.getStreamSource();
+                if (source instanceof FileSource &amp;amp;&amp;amp; sb.isTemporary()) {
                     return session.getBinary((FileSource)source);
                 }
             }

_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Stephane Lacoin</dc:creator>
    <dc:date>2012-05-23T16:22:15</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73138">
    <title>nuxeo-core: NXP-9361 move only temporary files,copy file if not on same filesystem (branch&lt; at &gt;master)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73138</link>
    <description>&lt;pre&gt;Message:
    NXP-9361 move only temporary files, copy file if not on same filesystem

Repository: nuxeo-core
Branch: master
Author: Stephane Lacoin &amp;lt;slacoin&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Date: 2012-05-23T09:20:37-07:00
URL: https://github.com/nuxeo/nuxeo-core/commit/1f7437caf3cb7e439be1f47a2f7502c14a51f9dd
JIRA: https://jira.nuxeo.com/browse/NXP-9361

Files:
M nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/blob/StreamingBlob.java
M nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/DefaultBinaryManager.java
M nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/coremodel/SQLSession.java

diff --git a/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/blob/StreamingBlob.java b/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/blob/StreamingBlob.java
index 82d7a9c..e80507f 100644
--- a/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/blob/StreamingBlob.java
+++ b/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/blob/StreamingBlob.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -187,7 +187,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public Blob persist() throws IOException {
             try {
                 persistedTmpFile = File.createTempFile(
                         "NXCore-persisted-StreamingBlob-", ".tmp");
-                persistedTmpFile.deleteOnExit();
                 in = src.getStream();
                 out = new FileOutputStream(persistedTmpFile);
                 copy(in, out);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -201,6 +200,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public Blob persist() throws IOException {
         return this;
     }
 
+    public boolean isTemporary() {
+        return persistedTmpFile != null;
+    }
+
     private void writeObject(ObjectOutputStream out) throws IOException {
         out.defaultWriteObject();
         long len = src.getLength();
diff --git a/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/DefaultBinaryManager.java b/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/DefaultBinaryManager.java
index 36cbef3..866829a 100644
--- a/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/DefaultBinaryManager.java
+++ b/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/DefaultBinaryManager.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -26,6 +26,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.nuxeo.common.Environment;
+import org.nuxeo.common.utils.FileUtils;
 import org.nuxeo.common.xmap.XMap;
 import org.nuxeo.runtime.api.Framework;
 import org.nuxeo.runtime.services.streaming.FileSource;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -228,7 +229,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; protected String storeAndDigest(FileSource source)  throws IOException {
             out.close();
         }
         File  digestFile = getFileForDigest(digest, true);
-        sourceFile.renameTo(digestFile);
+        if (!sourceFile.renameTo(digestFile)) {
+            FileUtils.copy(sourceFile, digestFile);
+            sourceFile.delete();
+        }
         source.setFile(digestFile);
         return digest;
     }
diff --git a/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/coremodel/SQLSession.java b/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/coremodel/SQLSession.java
index 0c91c93..8dc8cfe 100644
--- a/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/coremodel/SQLSession.java
+++ b/nuxeo-core-storage-sql/nuxeo-core-storage-sql/src/main/java/org/nuxeo/ecm/core/storage/sql/coremodel/SQLSession.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1094,8 +1094,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public Binary getBinary(Blob blob) throws DocumentException {
         StreamSource source;
         try {
             if (blob instanceof StreamingBlob) {
-                source = ((StreamingBlob) blob).getStreamSource();
-                if (source instanceof FileSource) {
+                StreamingBlob sb = (StreamingBlob) blob;
+                source = sb.getStreamSource();
+                if (source instanceof FileSource &amp;amp;&amp;amp; sb.isTemporary()) {
                     return session.getBinary((FileSource)source);
                 }
             }

_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Stephane Lacoin</dc:creator>
    <dc:date>2012-05-23T16:20:49</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73137">
    <title>nuxeo-rating: NXP-9153: unescape'nuxeoTargetContextPath' preference(branch&lt; at &gt;master)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73137</link>
    <description>&lt;pre&gt;Message:
    NXP-9153: unescape 'nuxeoTargetContextPath' preference

Repository: nuxeo-rating
Branch: master
Author: Thomas Roger &amp;lt;troger&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Pusher: troger &amp;lt;throger&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date: 2012-05-23T08:56:25-07:00
URL: https://github.com/nuxeo/nuxeo-rating/commit/87a1d65a017e256a0c183967f42c281854fac9e8
JIRA: https://jira.nuxeo.com/browse/NXP-9153

Files:
M nuxeo-rating-gadget/src/main/resources/web/nuxeo.war/scripts/opensocial/gadgets/mostLiked.js

diff --git a/nuxeo-rating-gadget/src/main/resources/web/nuxeo.war/scripts/opensocial/gadgets/mostLiked.js b/nuxeo-rating-gadget/src/main/resources/web/nuxeo.war/scripts/opensocial/gadgets/mostLiked.js
index 4ea472e..be0fead 100644
--- a/nuxeo-rating-gadget/src/main/resources/web/nuxeo.war/scripts/opensocial/gadgets/mostLiked.js
+++ b/nuxeo-rating-gadget/src/main/resources/web/nuxeo.war/scripts/opensocial/gadgets/mostLiked.js
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -60,7 +60,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; var prefs = new gadgets.Prefs();
         loadMostLiked();
       })
 
-      var savedContextPath = prefs.getString(Constants.prefContextPath) || contextPath;
+      var savedContextPath = gadgets.util.unescapeString(prefs.getString(Constants.prefContextPath)) || contextPath;
       for (var i = 0; i &amp;lt; response.data.entries.length; i++) {
         var entry = response.data.entries[i];
         var selected = entry.path == savedContextPath ? ' selected="selected"' : ''

AotICA_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Thomas Roger</dc:creator>
    <dc:date>2012-05-23T15:56:37</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73136">
    <title>nuxeo-social-collaboration: NXP-7732:unescape'nuxeoTargetContextPath' preference (branch&lt; at &gt;master)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73136</link>
    <description>&lt;pre&gt;Message:
    NXP-7732: unescape 'nuxeoTargetContextPath' preference

Repository: nuxeo-social-collaboration
Branch: master
Author: Thomas Roger &amp;lt;troger&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Pusher: troger &amp;lt;throger&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date: 2012-05-23T08:37:28-07:00
URL: https://github.com/nuxeo/nuxeo-social-collaboration/commit/a4301eb3565504f1a04fc0a95715c11b8af75e21
JIRA: https://jira.nuxeo.com/browse/NXP-7732

Files:
M nuxeo-wall/src/main/resources/web/nuxeo.war/scripts/opensocial/gadgets/wall.js

diff --git a/nuxeo-wall/src/main/resources/web/nuxeo.war/scripts/opensocial/gadgets/wall.js b/nuxeo-wall/src/main/resources/web/nuxeo.war/scripts/opensocial/gadgets/wall.js
index 7bceacc..cea4faa 100644
--- a/nuxeo-wall/src/main/resources/web/nuxeo.war/scripts/opensocial/gadgets/wall.js
+++ b/nuxeo-wall/src/main/resources/web/nuxeo.war/scripts/opensocial/gadgets/wall.js
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -138,7 +138,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
   var docId = prefs.getString("docId");
   var activityStreamName = prefs.getString("activityStreamName");
-  var documentContextPath = prefs.getString("nuxeoTargetContextPath");
+  var documentContextPath = gadgets.util.unescapeString(prefs.getString("nuxeoTargetContextPath"));
 
   var wallOperationParams, miniMessageOperationParams;
   if (docId !== 'undefined' &amp;amp;&amp;amp; docId.length &amp;gt; 0) {

ZzLmdldFN0cmluZ_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Thomas Roger</dc:creator>
    <dc:date>2012-05-23T15:37:44</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73135">
    <title>nuxeo-jsf: NXP-4937: add property foldedByDefault oncontainer widgettype (branch&lt; at &gt;master)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73135</link>
    <description>&lt;pre&gt;Message:
    NXP-4937: add property foldedByDefault on container widget type

Repository: nuxeo-jsf
Branch: master
Author: Anahide Tchertchian &amp;lt;at&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Pusher: atchertchian &amp;lt;atchertchian&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Date: 2012-05-23T08:30:03-07:00
URL: https://github.com/nuxeo/nuxeo-jsf/commit/bc847499b1cd5e84056fa315d78fdd591e59b4a6
JIRA: https://jira.nuxeo.com/browse/NXP-4937

Files:
M nuxeo-platform-forms-layout-client/src/main/resources/OSGI-INF/layouts-contrib.xml
M nuxeo-platform-forms-layout-client/src/main/resources/web/nuxeo.war/widgets/container_widget_template.xhtml

diff --git a/nuxeo-platform-forms-layout-client/src/main/resources/OSGI-INF/layouts-contrib.xml b/nuxeo-platform-forms-layout-client/src/main/resources/OSGI-INF/layouts-contrib.xml
index 4f9116a..95889a9 100644
--- a/nuxeo-platform-forms-layout-client/src/main/resources/OSGI-INF/layouts-contrib.xml
+++ b/nuxeo-platform-forms-layout-client/src/main/resources/OSGI-INF/layouts-contrib.xml
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2039,6 +2039,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
                   &amp;lt;widget&amp;gt;foldable&amp;lt;/widget&amp;gt;
                 &amp;lt;/row&amp;gt;
                 &amp;lt;row&amp;gt;
+                  &amp;lt;widget&amp;gt;foldedByDefault&amp;lt;/widget&amp;gt;
+                &amp;lt;/row&amp;gt;
+                &amp;lt;row&amp;gt;
                   &amp;lt;widget&amp;gt;headerStyleClass&amp;lt;/widget&amp;gt;
                 &amp;lt;/row&amp;gt;
                 &amp;lt;row&amp;gt;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2071,6 +2074,20 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
                   &amp;lt;field&amp;gt;foldable&amp;lt;/field&amp;gt;
                 &amp;lt;/fields&amp;gt;
               &amp;lt;/widget&amp;gt;
+              &amp;lt;widget name="foldedByDefault" type="checkbox"&amp;gt;
+                &amp;lt;labels&amp;gt;
+                  &amp;lt;label mode="any"&amp;gt;Folded by default&amp;lt;/label&amp;gt;
+                &amp;lt;/labels&amp;gt;
+                &amp;lt;helpLabels&amp;gt;
+                  &amp;lt;label mode="any"&amp;gt;
+                    If set to true, and property "foldable" is also set to true,
+                    the box will be folded by default. Defaults to false.
+                  &amp;lt;/label&amp;gt;
+                &amp;lt;/helpLabels&amp;gt;
+                &amp;lt;fields&amp;gt;
+                  &amp;lt;field&amp;gt;foldedByDefault&amp;lt;/field&amp;gt;
+                &amp;lt;/fields&amp;gt;
+              &amp;lt;/widget&amp;gt;
               &amp;lt;widget name="showIfEmpty" type="checkbox"&amp;gt;
                 &amp;lt;labels&amp;gt;
                   &amp;lt;label mode="any"&amp;gt;Show if empty&amp;lt;/label&amp;gt;
diff --git a/nuxeo-platform-forms-layout-client/src/main/resources/web/nuxeo.war/widgets/container_widget_template.xhtml b/nuxeo-platform-forms-layout-client/src/main/resources/web/nuxeo.war/widgets/container_widget_template.xhtml
index 42110f3..ce292f9 100644
--- a/nuxeo-platform-forms-layout-client/src/main/resources/web/nuxeo.war/widgets/container_widget_template.xhtml
+++ b/nuxeo-platform-forms-layout-client/src/main/resources/web/nuxeo.war/widgets/container_widget_template.xhtml
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -53,7 +53,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     &amp;lt;c:if test="#{showHeader}"&amp;gt;
       &amp;lt;c:choose&amp;gt;
         &amp;lt;c:when test="#{widgetProperty_foldable}"&amp;gt;
-          &amp;lt;h3 class="unfolded"&amp;gt;
+          &amp;lt;h3 class="#{nxu:test(widgetProperty_foldedByDefault, 'folded', 'unfolded')}"&amp;gt;
             &amp;lt;a href="#nogo" onclick="return toggleBox(this)"&amp;gt;
               &amp;lt;span class="#{widgetProperty_headerStyleClass}"&amp;gt;
                 &amp;lt;c:if test="#{widget.translated}"&amp;gt;#{messages[widget.label]}&amp;lt;/c:if&amp;gt;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -71,7 +71,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
       &amp;lt;/c:choose&amp;gt;
     &amp;lt;/c:if&amp;gt;
 
-    &amp;lt;div class="#{nxu:test(widgetProperty_foldable, 'boxBody', '')}"&amp;gt;
+    &amp;lt;div class="#{nxu:test(widgetProperty_foldable, 'boxBody', '')}"
+      style="#{nxu:test(widgetProperty_foldedByDefault, 'display: none;', '')}"&amp;gt;
 
       &amp;lt;c:choose&amp;gt;
 

_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Anahide Tchertchian</dc:creator>
    <dc:date>2012-05-23T15:30:12</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73134">
    <title>nuxeo-jsf: NXP-7793: add a property to hide topnavigation controlson content view widget type (andassociated templates) (branch&lt; at &gt;master)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73134</link>
    <description>&lt;pre&gt;Message:
    NXP-7793: add a property to hide top navigation controls on content view widget type (and associated templates)

Repository: nuxeo-jsf
Branch: master
Author: Anahide Tchertchian &amp;lt;at&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Pusher: atchertchian &amp;lt;atchertchian&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Date: 2012-05-23T08:10:04-07:00
URL: https://github.com/nuxeo/nuxeo-jsf/commit/2405ce787cab907266ef81b57585915b38b2187d
JIRA: https://jira.nuxeo.com/browse/NXP-7793

Files:
M nuxeo-platform-webapp-base/src/main/resources/OSGI-INF/layouts-contrib.xml
M nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/incl/content_view.xhtml
M nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/incl/documents_layout_table.xhtml
M nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/incl/documents_layout_table_content.xhtml
M nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/widgets/content_view_with_forms_widget.xhtml

diff --git a/nuxeo-platform-webapp-base/src/main/resources/OSGI-INF/layouts-contrib.xml b/nuxeo-platform-webapp-base/src/main/resources/OSGI-INF/layouts-contrib.xml
index 4669555..a48ea93 100644
--- a/nuxeo-platform-webapp-base/src/main/resources/OSGI-INF/layouts-contrib.xml
+++ b/nuxeo-platform-webapp-base/src/main/resources/OSGI-INF/layouts-contrib.xml
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1059,6 +1059,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
                   &amp;lt;widget&amp;gt;useAjaxPagination&amp;lt;/widget&amp;gt;
                 &amp;lt;/row&amp;gt;
                 &amp;lt;row&amp;gt;
+                  &amp;lt;widget&amp;gt;hideTopPaginationControls&amp;lt;/widget&amp;gt;
+                &amp;lt;/row&amp;gt;
+                &amp;lt;row&amp;gt;
                   &amp;lt;widget&amp;gt;defaultPageSize&amp;lt;/widget&amp;gt;
                 &amp;lt;/row&amp;gt;
                 &amp;lt;row&amp;gt;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1159,6 +1162,21 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
                   &amp;lt;field&amp;gt;useAjaxPagination&amp;lt;/field&amp;gt;
                 &amp;lt;/fields&amp;gt;
               &amp;lt;/widget&amp;gt;
+              &amp;lt;widget name="hideTopPaginationControls" type="checkbox"&amp;gt;
+                &amp;lt;labels&amp;gt;
+                  &amp;lt;label mode="any"&amp;gt;Show only bottom pagination controls&amp;lt;/label&amp;gt;
+                &amp;lt;/labels&amp;gt;
+                &amp;lt;helpLabels&amp;gt;
+                  &amp;lt;label mode="any"&amp;gt;
+                    If set to true, pagination actions (first,
+                    previous, next, last) actions will only be displayed below
+                    the results. Defaults to false.
+                  &amp;lt;/label&amp;gt;
+                &amp;lt;/helpLabels&amp;gt;
+                &amp;lt;fields&amp;gt;
+                  &amp;lt;field&amp;gt;hideTopPaginationControls&amp;lt;/field&amp;gt;
+                &amp;lt;/fields&amp;gt;
+              &amp;lt;/widget&amp;gt;
               &amp;lt;widget name="defaultPageSize" type="int"&amp;gt;
                 &amp;lt;labels&amp;gt;
                   &amp;lt;label mode="any"&amp;gt;Default page size&amp;lt;/label&amp;gt;
diff --git a/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/incl/content_view.xhtml b/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/incl/content_view.xhtml
index 5a59427..91ce016 100644
--- a/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/incl/content_view.xhtml
+++ b/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/incl/content_view.xhtml
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -28,6 +28,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     using ajax calls. (optional, available since 5.6, defaults to false).
   - useAjaxPagination: use ajax links for page navigation controls when set to
     true (optional, available since 5.6, defaults to false).
+  - hideTopPaginationControls: only display the bottom page selectors
+    (available since 5.6).
 
   Optional parameters used to override the content view definition when not
   empty:
diff --git a/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/incl/documents_layout_table.xhtml b/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/incl/documents_layout_table.xhtml
index c7d4892..624510b 100644
--- a/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/incl/documents_layout_table.xhtml
+++ b/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/incl/documents_layout_table.xhtml
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -30,6 +30,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   - contentIdToBeReRendered: mandatory id(s) of components to re-render
     when using an ajax form, mandatory if parameter usingAjaxForm is set to
     true (available since 5.6).
+  - hideTopPaginationControls: only display the bottom page selectors
+    (available since 5.6).
 &amp;lt;/c:if&amp;gt;
 
 &amp;lt;c:if test="#{documents != null}"&amp;gt;
diff --git a/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/incl/documents_layout_table_content.xhtml b/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/incl/documents_layout_table_content.xhtml
index 41262bb..0472118 100644
--- a/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/incl/documents_layout_table_content.xhtml
+++ b/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/incl/documents_layout_table_content.xhtml
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -18,6 +18,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   - layoutName: layout to use for listing rendering, mandatory
   - selectedResultLayoutColumns: list of result column names to display,
     optional, defaults to the layout default columns configuration.
+  - hideTopPaginationControls: only display the bottom page selectors
+    (available since 5.6).
 &amp;lt;/c:if&amp;gt;
 
   &amp;lt;ui:insert name="empty_folder_label"&amp;gt;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -27,14 +29,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
   &amp;lt;ui:insert name="error_message" /&amp;gt;
 
-  &amp;lt;ui:insert name="pageNavigationControls"&amp;gt;
-    &amp;lt;c:if test="#{useAjaxPagination}"&amp;gt;
-      &amp;lt;ui:include src="/pagination/a4jPageNavigationControls.xhtml" /&amp;gt;
-    &amp;lt;/c:if&amp;gt;
-    &amp;lt;c:if test="#{not useAjaxPagination}"&amp;gt;
-      &amp;lt;ui:include src="/pagination/pageNavigationControls.xhtml" /&amp;gt;
-    &amp;lt;/c:if&amp;gt;
-  &amp;lt;/ui:insert&amp;gt;
+  &amp;lt;c:if test="#{not hideTopPaginationControls}"&amp;gt;
+    &amp;lt;ui:insert name="pageNavigationControls"&amp;gt;
+      &amp;lt;c:if test="#{useAjaxPagination}"&amp;gt;
+        &amp;lt;ui:include src="/pagination/a4jPageNavigationControls.xhtml" /&amp;gt;
+      &amp;lt;/c:if&amp;gt;
+      &amp;lt;c:if test="#{not useAjaxPagination}"&amp;gt;
+        &amp;lt;ui:include src="/pagination/pageNavigationControls.xhtml" /&amp;gt;
+      &amp;lt;/c:if&amp;gt;
+    &amp;lt;/ui:insert&amp;gt;
+  &amp;lt;/c:if&amp;gt;
 
   &amp;lt;c:choose&amp;gt;
 
diff --git a/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/widgets/content_view_with_forms_widget.xhtml b/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/widgets/content_view_with_forms_widget.xhtml
index fce11f6..33452ec 100644
--- a/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/widgets/content_view_with_forms_widget.xhtml
+++ b/nuxeo-platform-webapp-base/src/main/resources/web/nuxeo.war/widgets/content_view_with_forms_widget.xhtml
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -37,6 +37,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
                 value="#{widgetProperty_showCSVExport}" /&amp;gt;
       &amp;lt;ui:param name="showPDFExport"
                 value="#{widgetProperty_showPDFExport}" /&amp;gt;
+      &amp;lt;ui:param name="hideTopPaginationControls"
+                value="#{widgetProperty_hideTopPaginationControls}" /&amp;gt;
     &amp;lt;/ui:decorate&amp;gt;
 
   &amp;lt;/nxu:set&amp;gt;

_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Anahide Tchertchian</dc:creator>
    <dc:date>2012-05-23T15:10:16</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73133">
    <title>nuxeo-core-binarymanager-s3: Add "About Nuxeo" blockat the end ofthe README.md file. (branch&lt; at &gt;master)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73133</link>
    <description>&lt;pre&gt;Message:
    Add "About Nuxeo" block at the end of the README.md file.

Repository: nuxeo-core-binarymanager-s3
Branch: master
Author: Olivier Grisel &amp;lt;olivier.grisel&amp;lt; at &amp;gt;ensta.org&amp;gt;
Date: 2012-05-23T06:54:41-07:00
URL: https://github.com/nuxeo/nuxeo-core-binarymanager-s3/commit/6ccd0d63ecc89d2e6a1af308eb26509ae99f297d

Files:
M README.md

diff --git a/README.md b/README.md
index a0e38d7..12b7995 100644
--- a/README.md
+++ b/README.md
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -62,3 +62,19 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; mandatory once you specify a keystore) :
 - nuxeo.s3storage.crypt.key.alias = the key alias
 - nuxeo.s3storage.crypt.key.password = the key password
 
+
+## About Nuxeo
+
+Nuxeo provides a modular, extensible Java-based [open source software
+platform for enterprise content management] [5] and packaged applications
+for [document management] [6], [digital asset management] [7] and
+[case management] [8]. Designed by developers for developers, the Nuxeo
+platform offers a modern architecture, a powerful plug-in model and
+extensive packaging capabilities for building content applications.
+
+[5]: http://www.nuxeo.com/en/products/ep
+[6]: http://www.nuxeo.com/en/products/document-management
+[7]: http://www.nuxeo.com/en/products/dam
+[8]: http://www.nuxeo.com/en/products/case-management
+
+More information on: &amp;lt;http://www.nuxeo.com/&amp;gt;

ions.
+_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Olivier Grisel</dc:creator>
    <dc:date>2012-05-23T13:54:44</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73132">
    <title>nuxeo-social-collaboration: Merge branch 'master'ofgithub.com:nuxeo/nuxeo-social-collaborationintoNXP-9155-improve-library-gadget(branch&lt; at &gt;NXP-9155-improve-library-gadget)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73132</link>
    <description>&lt;pre&gt;Message:
    Merge branch 'master' of github.com:nuxeo/nuxeo-social-collaboration into NXP-9155-improve-library-gadget

Repository: nuxeo-social-collaboration
Branch: NXP-9155-improve-library-gadget
Author: Vladimir Pasquier &amp;lt;vpasquier&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Date: 2012-05-23T05:53:16-07:00
URL: https://github.com/nuxeo/nuxeo-social-collaboration/commit/6798ddc2a596e12e535f1d9c2f29a5de0c86b90e

Files:
D nuxeo-wall/src/main/resources/web/nuxeo.war/scripts/mustache.js
M nuxeo-wall/src/main/java/org/nuxeo/ecm/wall/WallActivityStreamFilter.java
M nuxeo-wall/src/main/resources/OSGI-INF/l10n/messages.properties
M nuxeo-wall/src/main/resources/OSGI-INF/l10n/messages_en.properties
M nuxeo-wall/src/main/resources/OSGI-INF/l10n/messages_fr.properties
M nuxeo-wall/src/main/resources/OSGI-INF/theme-contrib.xml

diff --git a/nuxeo-wall/src/main/java/org/nuxeo/ecm/wall/WallActivityStreamFilter.java b/nuxeo-wall/src/main/java/org/nuxeo/ecm/wall/WallActivityStreamFilter.java
index 58082c0..2c38b77 100644
--- a/nuxeo-wall/src/main/java/org/nuxeo/ecm/wall/WallActivityStreamFilter.java
+++ b/nuxeo-wall/src/main/java/org/nuxeo/ecm/wall/WallActivityStreamFilter.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -102,7 +102,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public ActivitiesList query(ActivityStreamService activityStreamService,
                 + "where activity.context = :context "
                 + "and activity.verb in (:verbs) "
                 + "and activity.actor like :actor "
-                + "order by activity.publishedDate desc");
+                + "order by activity.lastUpdatedDate desc");
         query.setParameter("context", docActivityObject);
         query.setParameter("verbs", verbs);
         query.setParameter("actor", "user:%");
diff --git a/nuxeo-wall/src/main/resources/OSGI-INF/l10n/messages.properties b/nuxeo-wall/src/main/resources/OSGI-INF/l10n/messages.properties
index 7af30dc..2aaf04b 100644
--- a/nuxeo-wall/src/main/resources/OSGI-INF/l10n/messages.properties
+++ b/nuxeo-wall/src/main/resources/OSGI-INF/l10n/messages.properties
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,5 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 action.view.wall=Wall
+label.gadget.wall=Wall
 
 label.view.all=View all
 label.activity.replies=replies
diff --git a/nuxeo-wall/src/main/resources/OSGI-INF/l10n/messages_en.properties b/nuxeo-wall/src/main/resources/OSGI-INF/l10n/messages_en.properties
index 7af30dc..2aaf04b 100644
--- a/nuxeo-wall/src/main/resources/OSGI-INF/l10n/messages_en.properties
+++ b/nuxeo-wall/src/main/resources/OSGI-INF/l10n/messages_en.properties
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,5 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 action.view.wall=Wall
+label.gadget.wall=Wall
 
 label.view.all=View all
 label.activity.replies=replies
diff --git a/nuxeo-wall/src/main/resources/OSGI-INF/l10n/messages_fr.properties b/nuxeo-wall/src/main/resources/OSGI-INF/l10n/messages_fr.properties
index f4160cd..4455448 100644
--- a/nuxeo-wall/src/main/resources/OSGI-INF/l10n/messages_fr.properties
+++ b/nuxeo-wall/src/main/resources/OSGI-INF/l10n/messages_fr.properties
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,4 +1,5 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 action.view.wall=Mur
+label.gadget.wall=Mur
 
 label.view.all=Afficher les
 label.activity.replies=r\u00E9ponses
diff --git a/nuxeo-wall/src/main/resources/OSGI-INF/theme-contrib.xml b/nuxeo-wall/src/main/resources/OSGI-INF/theme-contrib.xml
index 7423c39..7fdf954 100644
--- a/nuxeo-wall/src/main/resources/OSGI-INF/theme-contrib.xml
+++ b/nuxeo-wall/src/main/resources/OSGI-INF/theme-contrib.xml
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -8,9 +8,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
       &amp;lt;path&amp;gt;css/opensocial/gadgets/wall.css&amp;lt;/path&amp;gt;
     &amp;lt;/resource&amp;gt;
 
-    &amp;lt;resource name="mustache.js"&amp;gt;
-      &amp;lt;path&amp;gt;scripts/mustache.js&amp;lt;/path&amp;gt;
-    &amp;lt;/resource&amp;gt;
     &amp;lt;resource name="gadget-wall.js"&amp;gt;
       &amp;lt;path&amp;gt;scripts/opensocial/gadgets/wall.js&amp;lt;/path&amp;gt;
     &amp;lt;/resource&amp;gt;
diff --git a/nuxeo-wall/src/main/resources/web/nuxeo.war/scripts/mustache.js b/nuxeo-wall/src/main/resources/web/nuxeo.war/scripts/mustache.js
deleted file mode 100644
index 641cebd..0000000
--- a/nuxeo-wall/src/main/resources/web/nuxeo.war/scripts/mustache.js
+++ /dev/null
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,536 +0,0 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-/*!
- * mustache.js - Logic-less {{mustache}} templates with JavaScript
- * http://github.com/janl/mustache.js
- */
-var Mustache = (typeof module !== "undefined" &amp;amp;&amp;amp; module.exports) || {};
-
-(function (exports) {
-
-  exports.name = "mustache.js";
-  exports.version = "0.5.0-dev";
-  exports.tags = ["{{", "}}"];
-  exports.parse = parse;
-  exports.compile = compile;
-  exports.render = render;
-  exports.clearCache = clearCache;
-
-  // This is here for backwards compatibility with 0.4.x.
-  exports.to_html = function (template, view, partials, send) {
-    var result = render(template, view, partials);
-
-    if (typeof send === "function") {
-      send(result);
-    } else {
-      return result;
-    }
-  };
-
-  var _toString = Object.prototype.toString;
-  var _isArray = Array.isArray;
-  var _forEach = Array.prototype.forEach;
-  var _trim = String.prototype.trim;
-
-  var isArray;
-  if (_isArray) {
-    isArray = _isArray;
-  } else {
-    isArray = function (obj) {
-      return _toString.call(obj) === "[object Array]";
-    };
-  }
-
-  var forEach;
-  if (_forEach) {
-    forEach = function (obj, callback, scope) {
-      return _forEach.call(obj, callback, scope);
-    };
-  } else {
-    forEach = function (obj, callback, scope) {
-      for (var i = 0, len = obj.length; i &amp;lt; len; ++i) {
-        callback.call(scope, obj[i], i, obj);
-      }
-    };
-  }
-
-  var spaceRe = /^\s*$/;
-
-  function isWhitespace(string) {
-    return spaceRe.test(string);
-  }
-
-  var trim;
-  if (_trim) {
-    trim = function (string) {
-      return string == null ? "" : _trim.call(string);
-    };
-  } else {
-    var trimLeft, trimRight;
-
-    if (isWhitespace("\xA0")) {
-      trimLeft = /^\s+/;
-      trimRight = /\s+$/;
-    } else {
-      // IE doesn't match non-breaking spaces with \s, thanks jQuery.
-      trimLeft = /^[\s\xA0]+/;
-      trimRight = /[\s\xA0]+$/;
-    }
-
-    trim = function (string) {
-      return string == null ? "" :
-        String(string).replace(trimLeft, "").replace(trimRight, "");
-    };
-  }
-
-  var escapeMap = {
-    "&amp;amp;": "&amp;amp;amp;",
-    "&amp;lt;": "&amp;amp;lt;",
-    "&amp;gt;": "&amp;amp;gt;",
-    '"': '&amp;amp;quot;',
-    "'": '&amp;amp;#39;'
-  };
-
-  function escapeHTML(string) {
-    return String(string).replace(/&amp;amp;(?!\w+;)|[&amp;lt;&amp;gt;"']/g, function (s) {
-      return escapeMap[s] || s;
-    });
-  }
-
-  /**
-   * Adds the `template`, `line`, and `file` properties to the given error
-   * object and alters the message to provide more useful debugging information.
-   */
-  function debug(e, template, line, file) {
-    file = file || "&amp;lt;template&amp;gt;";
-
-    var lines = template.split("\n"),
-        start = Math.max(line - 3, 0),
-        end = Math.min(lines.length, line + 3),
-        context = lines.slice(start, end);
-
-    var c;
-    for (var i = 0, len = context.length; i &amp;lt; len; ++i) {
-      c = i + start + 1;
-      context[i] = (c === line ? " &amp;gt;&amp;gt; " : "    ") + context[i];
-    }
-
-    e.template = template;
-    e.line = line;
-    e.file = file;
-    e.message = [file + ":" + line, context.join("\n"), "", e.message].join("\n");
-
-    return e;
-  }
-
-  /**
-   * Looks up the value of the given `name` in the given context `stack`.
-   */
-  function lookup(name, stack, defaultValue) {
-    if (name === ".") {
-      return stack[stack.length - 1];
-    }
-
-    var names = name.split(".");
-    var lastIndex = names.length - 1;
-    var target = names[lastIndex];
-
-    var value, context, i = stack.length, j, localStack;
-    while (i) {
-      localStack = stack.slice(0);
-      context = stack[--i];
-
-      j = 0;
-      while (j &amp;lt; lastIndex) {
-        context = context[names[j++]];
-
-        if (context == null) {
-          break;
-        }
-
-        localStack.push(context);
-      }
-
-      if (context &amp;amp;&amp;amp; typeof context === "object" &amp;amp;&amp;amp; target in context) {
-        value = context[target];
-        break;
-      }
-    }
-
-    // If the value is a function, call it in the current context.
-    if (typeof value === "function") {
-      value = value.call(localStack[localStack.length - 1]);
-    }
-
-    if (value == null)  {
-      return defaultValue;
-    }
-
-    return value;
-  }
-
-  function renderSection(name, stack, callback, inverted) {
-    var buffer = "";
-    var value =  lookup(name, stack);
-
-    if (inverted) {
-      // From the spec: inverted sections may render text once based on the
-      // inverse value of the key. That is, they will be rendered if the key
-      // doesn't exist, is false, or is an empty list.
-      if (value == null || value === false || (isArray(value) &amp;amp;&amp;amp; value.length === 0)) {
-        buffer += callback();
-      }
-    } else if (isArray(value)) {
-      forEach(value, function (value) {
-        stack.push(value);
-        buffer += callback();
-        stack.pop();
-      });
-    } else if (typeof value === "object") {
-      stack.push(value);
-      buffer += callback();
-      stack.pop();
-    } else if (typeof value === "function") {
-      var scope = stack[stack.length - 1];
-      var scopedRender = function (template) {
-        return render(template, scope);
-      };
-      buffer += value.call(scope, callback(), scopedRender) || "";
-    } else if (value) {
-      buffer += callback();
-    }
-
-    return buffer;
-  }
-
-  /**
-   * Parses the given `template` and returns the source of a function that,
-   * with the proper arguments, will render the template. Recognized options
-   * include the following:
-   *
-   *   - file     The name of the file the template comes from (displayed in
-   *              error messages)
-   *   - tags     An array of open and close tags the `template` uses. Defaults
-   *              to the value of Mustache.tags
-   *   - debug    Set `true` to log the body of the generated function to the
-   *              console
-   *   - space    Set `true` to preserve whitespace from lines that otherwise
-   *              contain only a {{tag}}. Defaults to `false`
-   */
-  function parse(template, options) {
-    options = options || {};
-
-    var tags = options.tags || exports.tags,
-        openTag = tags[0],
-        closeTag = tags[tags.length - 1];
-
-    var code = [
-      'var buffer = "";', // output buffer
-      "\nvar line = 1;", // keep track of source line number
-      "\ntry {",
-      '\nbuffer += "'
-    ];
-
-    var spaces = [],      // indices of whitespace in code on the current line
-        hasTag = false,   // is there a {{tag}} on the current line?
-        nonSpace = false; // is there a non-space char on the current line?
-
-    // Strips all space characters from the code array for the current line
-    // if there was a {{tag}} on it and otherwise only spaces.
-    var stripSpace = function () {
-      if (hasTag &amp;amp;&amp;amp; !nonSpace &amp;amp;&amp;amp; !options.space) {
-        while (spaces.length) {
-          code.splice(spaces.pop(), 1);
-        }
-      } else {
-        spaces = [];
-      }
-
-      hasTag = false;
-      nonSpace = false;
-    };
-
-    var sectionStack = [], updateLine, nextOpenTag, nextCloseTag;
-
-    var setTags = function (source) {
-      tags = trim(source).split(/\s+/);
-      nextOpenTag = tags[0];
-      nextCloseTag = tags[tags.length - 1];
-    };
-
-    var includePartial = function (source) {
-      code.push(
-        '";',
-        updateLine,
-        '\nvar partial = partials["' + trim(source) + '"];',
-        '\nif (partial) {',
-        '\n  buffer += render(partial,stack[stack.length - 1],partials);',
-        '\n}',
-        '\nbuffer += "'
-      );
-    };
-
-    var openSection = function (source, inverted) {
-      var name = trim(source);
-
-      if (name === "") {
-        throw debug(new Error("Section name may not be empty"), template, line, options.file);
-      }
-
-      sectionStack.push({name: name, inverted: inverted});
-
-      code.push(
-        '";',
-        updateLine,
-        '\nvar name = "' + name + '";',
-        '\nvar callback = (function () {',
-        '\n  return function () {',
-        '\n    var buffer = "";',
-        '\nbuffer += "'
-      );
-    };
-
-    var openInvertedSection = function (source) {
-      openSection(source, true);
-    };
-
-    var closeSection = function (source) {
-      var name = trim(source);
-      var openName = sectionStack.length != 0 &amp;amp;&amp;amp; sectionStack[sectionStack.length - 1].name;
-
-      if (!openName || name != openName) {
-        throw debug(new Error('Section named "' + name + '" was never opened'), template, line, options.file);
-      }
-
-      var section = sectionStack.pop();
-
-      code.push(
-        '";',
-        '\n    return buffer;',
-        '\n  };',
-        '\n})();'
-      );
-
-      if (section.inverted) {
-        code.push("\nbuffer += renderSection(name,stack,callback,true);");
-      } else {
-        code.push("\nbuffer += renderSection(name,stack,callback);");
-      }
-
-      code.push('\nbuffer += "');
-    };
-
-    var sendPlain = function (source) {
-      code.push(
-        '";',
-        updateLine,
-        '\nbuffer += lookup("' + trim(source) + '",stack,"");',
-        '\nbuffer += "'
-      );
-    };
-
-    var sendEscaped = function (source) {
-      code.push(
-        '";',
-        updateLine,
-        '\nbuffer += escapeHTML(lookup("' + trim(source) + '",stack,""));',
-        '\nbuffer += "'
-      );
-    };
-
-    var line = 1, c, callback;
-    for (var i = 0, len = template.length; i &amp;lt; len; ++i) {
-      if (template.slice(i, i + openTag.length) === openTag) {
-        i += openTag.length;
-        c = template.substr(i, 1);
-        updateLine = '\nline = ' + line + ';';
-        nextOpenTag = openTag;
-        nextCloseTag = closeTag;
-        hasTag = true;
-
-        switch (c) {
-        case "!": // comment
-          i++;
-          callback = null;
-          break;
-        case "=": // change open/close tags, e.g. {{=&amp;lt;% %&amp;gt;=}}
-          i++;
-          closeTag = "=" + closeTag;
-          callback = setTags;
-          break;
-        case "&amp;gt;": // include partial
-          i++;
-          callback = includePartial;
-          break;
-        case "#": // start section
-          i++;
-          callback = openSection;
-          break;
-        case "^": // start inverted section
-          i++;
-          callback = openInvertedSection;
-          break;
-        case "/": // end section
-          i++;
-          callback = closeSection;
-          break;
-        case "{": // plain variable
-          closeTag = "}" + closeTag;
-          // fall through
-        case "&amp;amp;": // plain variable
-          i++;
-          nonSpace = true;
-          callback = sendPlain;
-          break;
-        default: // escaped variable
-          nonSpace = true;
-          callback = sendEscaped;
-        }
-
-        var end = template.indexOf(closeTag, i);
-
-        if (end === -1) {
-          throw debug(new Error('Tag "' + openTag + '" was not closed properly'), template, line, options.file);
-        }
-
-        var source = template.substring(i, end);
-
-        if (callback) {
-          callback(source);
-        }
-
-        // Maintain line count for \n in source.
-        var n = 0;
-        while (~(n = source.indexOf("\n", n))) {
-          line++;
-          n++;
-        }
-
-        i = end + closeTag.length - 1;
-        openTag = nextOpenTag;
-        closeTag = nextCloseTag;
-      } else {
-        c = template.substr(i, 1);
-
-        switch (c) {
-        case '"':
-        case "\\":
-          nonSpace = true;
-          code.push("\\" + c);
-          break;
-        case "\r":
-          // Ignore carriage returns.
-          break;
-        case "\n":
-          spaces.push(code.length);
-          code.push("\\n");
-          stripSpace(); // Check for whitespace on the current line.
-          line++;
-          break;
-        default:
-          if (isWhitespace(c)) {
-            spaces.push(code.length);
-          } else {
-            nonSpace = true;
-          }
-
-          code.push(c);
-        }
-      }
-    }
-
-    if (sectionStack.length != 0) {
-      throw debug(new Error('Section "' + sectionStack[sectionStack.length - 1].name + '" was not closed properly'), template, line, options.file);
-    }
-
-    // Clean up any whitespace from a closing {{tag}} that was at the end
-    // of the template without a trailing \n.
-    stripSpace();
-
-    code.push(
-      '";',
-      "\nreturn buffer;",
-      "\n} catch (e) { throw {error: e, line: line}; }"
-    );
-
-    // Ignore `buffer += "";` statements.
-    var body = code.join("").replace(/buffer \+= "";\n/g, "");
-
-    if (options.debug) {
-      if (typeof console != "undefined" &amp;amp;&amp;amp; console.log) {
-        console.log(body);
-      } else if (typeof print === "function") {
-        print(body);
-      }
-    }
-
-    return body;
-  }
-
-  /**
-   * Used by `compile` to generate a reusable function for the given `template`.
-   */
-  function _compile(template, options) {
-    var args = "view,partials,stack,lookup,escapeHTML,renderSection,render";
-    var body = parse(template, options);
-    var fn = new Function(args, body);
-
-    // This anonymous function wraps the generated function so we can do
-    // argument coercion, setup some variables, and handle any errors
-    // encountered while executing it.
-    return function (view, partials) {
-      partials = partials || {};
-
-      var stack = [view]; // context stack
-
-      try {
-        return fn(view, partials, stack, lookup, escapeHTML, renderSection, render);
-      } catch (e) {
-        throw debug(e.error, template, e.line, options.file);
-      }
-    };
-  }
-
-  // Cache of pre-compiled templates.
-  var _cache = {};
-
-  /**
-   * Clear the cache of compiled templates.
-   */
-  function clearCache() {
-    _cache = {};
-  }
-
-  /**
-   * Compiles the given `template` into a reusable function using the given
-   * `options`. In addition to the options accepted by Mustache.parse,
-   * recognized options include the following:
-   *
-   *   - cache    Set `false` to bypass any pre-compiled version of the given
-   *              template. Otherwise, a given `template` string will be cached
-   *              the first time it is parsed
-   */
-  function compile(template, options) {
-    options = options || {};
-
-    // Use a pre-compiled version from the cache if we have one.
-    if (options.cache !== false) {
-      if (!_cache[template]) {
-        _cache[template] = _compile(template, options);
-      }
-
-      return _cache[template];
-    }
-
-    return _compile(template, options);
-  }
-
-  /**
-   * High-level function that renders the given `template` using the given
-   * `view` and `partials`. If you need to use any of the template options (see
-   * `compile` above), you must compile in a separate step, and then call that
-   * compiled function.
-   */
-  function render(template, view, partials) {
-    return compile(template)(view, partials);
-  }
-
-})(Mustache);

_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Vladimir Pasquier</dc:creator>
    <dc:date>2012-05-23T13:54:15</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73131">
    <title>nuxeo-social-collaboration: NXP-9360: usemustache.js script fromnuxeo-platform-webapp(branch&lt; at &gt;NXP-9155-improve-library-gadget)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73131</link>
    <description>&lt;pre&gt;Message:
    NXP-9360: use mustache.js script from nuxeo-platform-webapp

Repository: nuxeo-social-collaboration
Branch: NXP-9155-improve-library-gadget
Author: Thomas Roger &amp;lt;troger&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Pusher: vpasquier &amp;lt;vpasquier&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Date: 2012-05-23T03:23:48-07:00
URL: https://github.com/nuxeo/nuxeo-social-collaboration/commit/ecfff450790b675b32bac60987b5feff15c9e8f2
JIRA: https://jira.nuxeo.com/browse/NXP-9360

Files:
D nuxeo-wall/src/main/resources/web/nuxeo.war/scripts/mustache.js
M nuxeo-wall/src/main/resources/OSGI-INF/theme-contrib.xml

diff --git a/nuxeo-wall/src/main/resources/OSGI-INF/theme-contrib.xml b/nuxeo-wall/src/main/resources/OSGI-INF/theme-contrib.xml
index 7423c39..7fdf954 100644
--- a/nuxeo-wall/src/main/resources/OSGI-INF/theme-contrib.xml
+++ b/nuxeo-wall/src/main/resources/OSGI-INF/theme-contrib.xml
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -8,9 +8,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
       &amp;lt;path&amp;gt;css/opensocial/gadgets/wall.css&amp;lt;/path&amp;gt;
     &amp;lt;/resource&amp;gt;
 
-    &amp;lt;resource name="mustache.js"&amp;gt;
-      &amp;lt;path&amp;gt;scripts/mustache.js&amp;lt;/path&amp;gt;
-    &amp;lt;/resource&amp;gt;
     &amp;lt;resource name="gadget-wall.js"&amp;gt;
       &amp;lt;path&amp;gt;scripts/opensocial/gadgets/wall.js&amp;lt;/path&amp;gt;
     &amp;lt;/resource&amp;gt;
diff --git a/nuxeo-wall/src/main/resources/web/nuxeo.war/scripts/mustache.js b/nuxeo-wall/src/main/resources/web/nuxeo.war/scripts/mustache.js
deleted file mode 100644
index 641cebd..0000000
--- a/nuxeo-wall/src/main/resources/web/nuxeo.war/scripts/mustache.js
+++ /dev/null
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,536 +0,0 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-/*!
- * mustache.js - Logic-less {{mustache}} templates with JavaScript
- * http://github.com/janl/mustache.js
- */
-var Mustache = (typeof module !== "undefined" &amp;amp;&amp;amp; module.exports) || {};
-
-(function (exports) {
-
-  exports.name = "mustache.js";
-  exports.version = "0.5.0-dev";
-  exports.tags = ["{{", "}}"];
-  exports.parse = parse;
-  exports.compile = compile;
-  exports.render = render;
-  exports.clearCache = clearCache;
-
-  // This is here for backwards compatibility with 0.4.x.
-  exports.to_html = function (template, view, partials, send) {
-    var result = render(template, view, partials);
-
-    if (typeof send === "function") {
-      send(result);
-    } else {
-      return result;
-    }
-  };
-
-  var _toString = Object.prototype.toString;
-  var _isArray = Array.isArray;
-  var _forEach = Array.prototype.forEach;
-  var _trim = String.prototype.trim;
-
-  var isArray;
-  if (_isArray) {
-    isArray = _isArray;
-  } else {
-    isArray = function (obj) {
-      return _toString.call(obj) === "[object Array]";
-    };
-  }
-
-  var forEach;
-  if (_forEach) {
-    forEach = function (obj, callback, scope) {
-      return _forEach.call(obj, callback, scope);
-    };
-  } else {
-    forEach = function (obj, callback, scope) {
-      for (var i = 0, len = obj.length; i &amp;lt; len; ++i) {
-        callback.call(scope, obj[i], i, obj);
-      }
-    };
-  }
-
-  var spaceRe = /^\s*$/;
-
-  function isWhitespace(string) {
-    return spaceRe.test(string);
-  }
-
-  var trim;
-  if (_trim) {
-    trim = function (string) {
-      return string == null ? "" : _trim.call(string);
-    };
-  } else {
-    var trimLeft, trimRight;
-
-    if (isWhitespace("\xA0")) {
-      trimLeft = /^\s+/;
-      trimRight = /\s+$/;
-    } else {
-      // IE doesn't match non-breaking spaces with \s, thanks jQuery.
-      trimLeft = /^[\s\xA0]+/;
-      trimRight = /[\s\xA0]+$/;
-    }
-
-    trim = function (string) {
-      return string == null ? "" :
-        String(string).replace(trimLeft, "").replace(trimRight, "");
-    };
-  }
-
-  var escapeMap = {
-    "&amp;amp;": "&amp;amp;amp;",
-    "&amp;lt;": "&amp;amp;lt;",
-    "&amp;gt;": "&amp;amp;gt;",
-    '"': '&amp;amp;quot;',
-    "'": '&amp;amp;#39;'
-  };
-
-  function escapeHTML(string) {
-    return String(string).replace(/&amp;amp;(?!\w+;)|[&amp;lt;&amp;gt;"']/g, function (s) {
-      return escapeMap[s] || s;
-    });
-  }
-
-  /**
-   * Adds the `template`, `line`, and `file` properties to the given error
-   * object and alters the message to provide more useful debugging information.
-   */
-  function debug(e, template, line, file) {
-    file = file || "&amp;lt;template&amp;gt;";
-
-    var lines = template.split("\n"),
-        start = Math.max(line - 3, 0),
-        end = Math.min(lines.length, line + 3),
-        context = lines.slice(start, end);
-
-    var c;
-    for (var i = 0, len = context.length; i &amp;lt; len; ++i) {
-      c = i + start + 1;
-      context[i] = (c === line ? " &amp;gt;&amp;gt; " : "    ") + context[i];
-    }
-
-    e.template = template;
-    e.line = line;
-    e.file = file;
-    e.message = [file + ":" + line, context.join("\n"), "", e.message].join("\n");
-
-    return e;
-  }
-
-  /**
-   * Looks up the value of the given `name` in the given context `stack`.
-   */
-  function lookup(name, stack, defaultValue) {
-    if (name === ".") {
-      return stack[stack.length - 1];
-    }
-
-    var names = name.split(".");
-    var lastIndex = names.length - 1;
-    var target = names[lastIndex];
-
-    var value, context, i = stack.length, j, localStack;
-    while (i) {
-      localStack = stack.slice(0);
-      context = stack[--i];
-
-      j = 0;
-      while (j &amp;lt; lastIndex) {
-        context = context[names[j++]];
-
-        if (context == null) {
-          break;
-        }
-
-        localStack.push(context);
-      }
-
-      if (context &amp;amp;&amp;amp; typeof context === "object" &amp;amp;&amp;amp; target in context) {
-        value = context[target];
-        break;
-      }
-    }
-
-    // If the value is a function, call it in the current context.
-    if (typeof value === "function") {
-      value = value.call(localStack[localStack.length - 1]);
-    }
-
-    if (value == null)  {
-      return defaultValue;
-    }
-
-    return value;
-  }
-
-  function renderSection(name, stack, callback, inverted) {
-    var buffer = "";
-    var value =  lookup(name, stack);
-
-    if (inverted) {
-      // From the spec: inverted sections may render text once based on the
-      // inverse value of the key. That is, they will be rendered if the key
-      // doesn't exist, is false, or is an empty list.
-      if (value == null || value === false || (isArray(value) &amp;amp;&amp;amp; value.length === 0)) {
-        buffer += callback();
-      }
-    } else if (isArray(value)) {
-      forEach(value, function (value) {
-        stack.push(value);
-        buffer += callback();
-        stack.pop();
-      });
-    } else if (typeof value === "object") {
-      stack.push(value);
-      buffer += callback();
-      stack.pop();
-    } else if (typeof value === "function") {
-      var scope = stack[stack.length - 1];
-      var scopedRender = function (template) {
-        return render(template, scope);
-      };
-      buffer += value.call(scope, callback(), scopedRender) || "";
-    } else if (value) {
-      buffer += callback();
-    }
-
-    return buffer;
-  }
-
-  /**
-   * Parses the given `template` and returns the source of a function that,
-   * with the proper arguments, will render the template. Recognized options
-   * include the following:
-   *
-   *   - file     The name of the file the template comes from (displayed in
-   *              error messages)
-   *   - tags     An array of open and close tags the `template` uses. Defaults
-   *              to the value of Mustache.tags
-   *   - debug    Set `true` to log the body of the generated function to the
-   *              console
-   *   - space    Set `true` to preserve whitespace from lines that otherwise
-   *              contain only a {{tag}}. Defaults to `false`
-   */
-  function parse(template, options) {
-    options = options || {};
-
-    var tags = options.tags || exports.tags,
-        openTag = tags[0],
-        closeTag = tags[tags.length - 1];
-
-    var code = [
-      'var buffer = "";', // output buffer
-      "\nvar line = 1;", // keep track of source line number
-      "\ntry {",
-      '\nbuffer += "'
-    ];
-
-    var spaces = [],      // indices of whitespace in code on the current line
-        hasTag = false,   // is there a {{tag}} on the current line?
-        nonSpace = false; // is there a non-space char on the current line?
-
-    // Strips all space characters from the code array for the current line
-    // if there was a {{tag}} on it and otherwise only spaces.
-    var stripSpace = function () {
-      if (hasTag &amp;amp;&amp;amp; !nonSpace &amp;amp;&amp;amp; !options.space) {
-        while (spaces.length) {
-          code.splice(spaces.pop(), 1);
-        }
-      } else {
-        spaces = [];
-      }
-
-      hasTag = false;
-      nonSpace = false;
-    };
-
-    var sectionStack = [], updateLine, nextOpenTag, nextCloseTag;
-
-    var setTags = function (source) {
-      tags = trim(source).split(/\s+/);
-      nextOpenTag = tags[0];
-      nextCloseTag = tags[tags.length - 1];
-    };
-
-    var includePartial = function (source) {
-      code.push(
-        '";',
-        updateLine,
-        '\nvar partial = partials["' + trim(source) + '"];',
-        '\nif (partial) {',
-        '\n  buffer += render(partial,stack[stack.length - 1],partials);',
-        '\n}',
-        '\nbuffer += "'
-      );
-    };
-
-    var openSection = function (source, inverted) {
-      var name = trim(source);
-
-      if (name === "") {
-        throw debug(new Error("Section name may not be empty"), template, line, options.file);
-      }
-
-      sectionStack.push({name: name, inverted: inverted});
-
-      code.push(
-        '";',
-        updateLine,
-        '\nvar name = "' + name + '";',
-        '\nvar callback = (function () {',
-        '\n  return function () {',
-        '\n    var buffer = "";',
-        '\nbuffer += "'
-      );
-    };
-
-    var openInvertedSection = function (source) {
-      openSection(source, true);
-    };
-
-    var closeSection = function (source) {
-      var name = trim(source);
-      var openName = sectionStack.length != 0 &amp;amp;&amp;amp; sectionStack[sectionStack.length - 1].name;
-
-      if (!openName || name != openName) {
-        throw debug(new Error('Section named "' + name + '" was never opened'), template, line, options.file);
-      }
-
-      var section = sectionStack.pop();
-
-      code.push(
-        '";',
-        '\n    return buffer;',
-        '\n  };',
-        '\n})();'
-      );
-
-      if (section.inverted) {
-        code.push("\nbuffer += renderSection(name,stack,callback,true);");
-      } else {
-        code.push("\nbuffer += renderSection(name,stack,callback);");
-      }
-
-      code.push('\nbuffer += "');
-    };
-
-    var sendPlain = function (source) {
-      code.push(
-        '";',
-        updateLine,
-        '\nbuffer += lookup("' + trim(source) + '",stack,"");',
-        '\nbuffer += "'
-      );
-    };
-
-    var sendEscaped = function (source) {
-      code.push(
-        '";',
-        updateLine,
-        '\nbuffer += escapeHTML(lookup("' + trim(source) + '",stack,""));',
-        '\nbuffer += "'
-      );
-    };
-
-    var line = 1, c, callback;
-    for (var i = 0, len = template.length; i &amp;lt; len; ++i) {
-      if (template.slice(i, i + openTag.length) === openTag) {
-        i += openTag.length;
-        c = template.substr(i, 1);
-        updateLine = '\nline = ' + line + ';';
-        nextOpenTag = openTag;
-        nextCloseTag = closeTag;
-        hasTag = true;
-
-        switch (c) {
-        case "!": // comment
-          i++;
-          callback = null;
-          break;
-        case "=": // change open/close tags, e.g. {{=&amp;lt;% %&amp;gt;=}}
-          i++;
-          closeTag = "=" + closeTag;
-          callback = setTags;
-          break;
-        case "&amp;gt;": // include partial
-          i++;
-          callback = includePartial;
-          break;
-        case "#": // start section
-          i++;
-          callback = openSection;
-          break;
-        case "^": // start inverted section
-          i++;
-          callback = openInvertedSection;
-          break;
-        case "/": // end section
-          i++;
-          callback = closeSection;
-          break;
-        case "{": // plain variable
-          closeTag = "}" + closeTag;
-          // fall through
-        case "&amp;amp;": // plain variable
-          i++;
-          nonSpace = true;
-          callback = sendPlain;
-          break;
-        default: // escaped variable
-          nonSpace = true;
-          callback = sendEscaped;
-        }
-
-        var end = template.indexOf(closeTag, i);
-
-        if (end === -1) {
-          throw debug(new Error('Tag "' + openTag + '" was not closed properly'), template, line, options.file);
-        }
-
-        var source = template.substring(i, end);
-
-        if (callback) {
-          callback(source);
-        }
-
-        // Maintain line count for \n in source.
-        var n = 0;
-        while (~(n = source.indexOf("\n", n))) {
-          line++;
-          n++;
-        }
-
-        i = end + closeTag.length - 1;
-        openTag = nextOpenTag;
-        closeTag = nextCloseTag;
-      } else {
-        c = template.substr(i, 1);
-
-        switch (c) {
-        case '"':
-        case "\\":
-          nonSpace = true;
-          code.push("\\" + c);
-          break;
-        case "\r":
-          // Ignore carriage returns.
-          break;
-        case "\n":
-          spaces.push(code.length);
-          code.push("\\n");
-          stripSpace(); // Check for whitespace on the current line.
-          line++;
-          break;
-        default:
-          if (isWhitespace(c)) {
-            spaces.push(code.length);
-          } else {
-            nonSpace = true;
-          }
-
-          code.push(c);
-        }
-      }
-    }
-
-    if (sectionStack.length != 0) {
-      throw debug(new Error('Section "' + sectionStack[sectionStack.length - 1].name + '" was not closed properly'), template, line, options.file);
-    }
-
-    // Clean up any whitespace from a closing {{tag}} that was at the end
-    // of the template without a trailing \n.
-    stripSpace();
-
-    code.push(
-      '";',
-      "\nreturn buffer;",
-      "\n} catch (e) { throw {error: e, line: line}; }"
-    );
-
-    // Ignore `buffer += "";` statements.
-    var body = code.join("").replace(/buffer \+= "";\n/g, "");
-
-    if (options.debug) {
-      if (typeof console != "undefined" &amp;amp;&amp;amp; console.log) {
-        console.log(body);
-      } else if (typeof print === "function") {
-        print(body);
-      }
-    }
-
-    return body;
-  }
-
-  /**
-   * Used by `compile` to generate a reusable function for the given `template`.
-   */
-  function _compile(template, options) {
-    var args = "view,partials,stack,lookup,escapeHTML,renderSection,render";
-    var body = parse(template, options);
-    var fn = new Function(args, body);
-
-    // This anonymous function wraps the generated function so we can do
-    // argument coercion, setup some variables, and handle any errors
-    // encountered while executing it.
-    return function (view, partials) {
-      partials = partials || {};
-
-      var stack = [view]; // context stack
-
-      try {
-        return fn(view, partials, stack, lookup, escapeHTML, renderSection, render);
-      } catch (e) {
-        throw debug(e.error, template, e.line, options.file);
-      }
-    };
-  }
-
-  // Cache of pre-compiled templates.
-  var _cache = {};
-
-  /**
-   * Clear the cache of compiled templates.
-   */
-  function clearCache() {
-    _cache = {};
-  }
-
-  /**
-   * Compiles the given `template` into a reusable function using the given
-   * `options`. In addition to the options accepted by Mustache.parse,
-   * recognized options include the following:
-   *
-   *   - cache    Set `false` to bypass any pre-compiled version of the given
-   *              template. Otherwise, a given `template` string will be cached
-   *              the first time it is parsed
-   */
-  function compile(template, options) {
-    options = options || {};
-
-    // Use a pre-compiled version from the cache if we have one.
-    if (options.cache !== false) {
-      if (!_cache[template]) {
-        _cache[template] = _compile(template, options);
-      }
-
-      return _cache[template];
-    }
-
-    return _compile(template, options);
-  }
-
-  /**
-   * High-level function that renders the given `template` using the given
-   * `view` and `partials`. If you need to use any of the template options (see
-   * `compile` above), you must compile in a separate step, and then call that
-   * compiled function.
-   */
-  function render(template, view, partials) {
-    return compile(template)(view, partials);
-  }
-
-})(Mustache);

_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Thomas Roger</dc:creator>
    <dc:date>2012-05-23T13:54:14</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73130">
    <title>nuxeo-social-collaboration: NXP-7732: order wallactivities bylastUpdatedDate field(branch&lt; at &gt;NXP-9155-improve-library-gadget)</title>
    <link>http://permalink.gmane.org/gmane.comp.cms.nuxeo.scm/73130</link>
    <description>&lt;pre&gt;Message:
    NXP-7732: order wall activities by lastUpdatedDate field

Repository: nuxeo-social-collaboration
Branch: NXP-9155-improve-library-gadget
Author: Thomas Roger &amp;lt;troger&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Pusher: vpasquier &amp;lt;vpasquier&amp;lt; at &amp;gt;nuxeo.com&amp;gt;
Date: 2012-05-23T03:24:49-07:00
URL: https://github.com/nuxeo/nuxeo-social-collaboration/commit/ac80796124e74f42ddd5b3bb149b95caf1a82326
JIRA: https://jira.nuxeo.com/browse/NXP-7732

Files:
M nuxeo-wall/src/main/java/org/nuxeo/ecm/wall/WallActivityStreamFilter.java

diff --git a/nuxeo-wall/src/main/java/org/nuxeo/ecm/wall/WallActivityStreamFilter.java b/nuxeo-wall/src/main/java/org/nuxeo/ecm/wall/WallActivityStreamFilter.java
index 58082c0..2c38b77 100644
--- a/nuxeo-wall/src/main/java/org/nuxeo/ecm/wall/WallActivityStreamFilter.java
+++ b/nuxeo-wall/src/main/java/org/nuxeo/ecm/wall/WallActivityStreamFilter.java
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -102,7 +102,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; public ActivitiesList query(ActivityStreamService activityStreamService,
                 + "where activity.context = :context "
                 + "and activity.verb in (:verbs) "
                 + "and activity.actor like :actor "
-                + "order by activity.publishedDate desc");
+                + "order by activity.lastUpdatedDate desc");
         query.setParameter("context", docActivityObject);
         query.setParameter("verbs", verbs);
         query.setParameter("actor", "user:%");

"orde_______________________________________________
ECM-checkins mailing list
ECM-checkins-FQDHc1wsLCVb90+sfpvX0g&amp;lt; at &amp;gt;public.gmane.org
http://lists.nuxeo.com/mailman/listinfo/ecm-checkins
&lt;/pre&gt;</description>
    <dc:creator>Thomas Roger</dc:creator>
    <dc:date>2012-05-23T13:54:14</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.cms.nuxeo.scm">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.cms.nuxeo.scm</link>
  </textinput>
</rdf:RDF>

