You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2014/11/13 23:23:43 UTC

[10/18] incubator-brooklyn git commit: Catalog versioning - when no explicit version use the highest version (preferring non-snapshot)

Catalog versioning - when no explicit version use the highest version (preferring non-snapshot)


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/1a9d0e30
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/1a9d0e30
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/1a9d0e30

Branch: refs/heads/master
Commit: 1a9d0e30972c717d30d9bae94613bf8197ab82ba
Parents: 415619a
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Mon Nov 10 19:39:35 2014 +0200
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Thu Nov 13 11:49:52 2014 +0200

----------------------------------------------------------------------
 .../catalog/internal/BasicBrooklynCatalog.java  |  2 +-
 .../catalog/internal/CatalogItemComparator.java | 33 ++++++++++++++++++++
 .../internal/CatalogItemVersionComparator.java  | 16 ----------
 .../src/main/webapp/assets/js/view/catalog.js   |  6 ++--
 .../rest/resources/CatalogResource.java         | 13 +++++---
 5 files changed, 44 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1a9d0e30/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
index f74e24c..ed85e76 100644
--- a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
@@ -193,7 +193,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
 
     private String getDefaultVersion(String symbolicName) {
         Iterable<CatalogItem<Object, Object>> versions = getCatalogItems(CatalogPredicates.symbolicName(Predicates.equalTo(symbolicName)));
-        ImmutableSortedSet<CatalogItem<?, ?>> orderedVersions = ImmutableSortedSet.orderedBy(new CatalogItemVersionComparator()).addAll(versions).build();
+        ImmutableSortedSet<CatalogItem<?, ?>> orderedVersions = ImmutableSortedSet.orderedBy(new CatalogItemComparator()).addAll(versions).build();
         if (!orderedVersions.isEmpty()) {
             return orderedVersions.iterator().next().getVersion();
         } else {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1a9d0e30/core/src/main/java/brooklyn/catalog/internal/CatalogItemComparator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogItemComparator.java b/core/src/main/java/brooklyn/catalog/internal/CatalogItemComparator.java
new file mode 100644
index 0000000..f5523e2
--- /dev/null
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogItemComparator.java
@@ -0,0 +1,33 @@
+package brooklyn.catalog.internal;
+
+import java.util.Comparator;
+
+import brooklyn.catalog.CatalogItem;
+import brooklyn.util.text.NaturalOrderComparator;
+
+public class CatalogItemComparator implements Comparator<CatalogItem<?, ?>> {
+    private static final String SNAPSHOT = "SNAPSHOT";
+    private static final Comparator<String> COMPARATOR = new NaturalOrderComparator();
+
+    public static final CatalogItemComparator INSTANCE = new CatalogItemComparator();
+
+    @Override
+    public int compare(CatalogItem<?, ?> o1, CatalogItem<?, ?> o2) {
+        int symbolicNameComparison = o1.getSymbolicName().compareTo(o2.getSymbolicName());
+        if (symbolicNameComparison != 0) {
+            return symbolicNameComparison;
+        } else {
+            String v1 = o1.getVersion().toUpperCase();
+            String v2 = o2.getVersion().toUpperCase();
+            boolean isV1Snapshot = v1.contains(SNAPSHOT);
+            boolean isV2Snapshot = v2.contains(SNAPSHOT);
+            if (isV1Snapshot == isV2Snapshot) {
+                return -COMPARATOR.compare(v1, v2);
+            } else if (isV1Snapshot) {
+                return 1;
+            } else {
+                return -1;
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1a9d0e30/core/src/main/java/brooklyn/catalog/internal/CatalogItemVersionComparator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogItemVersionComparator.java b/core/src/main/java/brooklyn/catalog/internal/CatalogItemVersionComparator.java
deleted file mode 100644
index 3e279a4..0000000
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogItemVersionComparator.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package brooklyn.catalog.internal;
-
-import java.util.Comparator;
-
-import brooklyn.catalog.CatalogItem;
-
-public class CatalogItemVersionComparator implements Comparator<CatalogItem<?, ?>> {
-
-    protected CatalogItemVersionComparator() {}
-
-    @Override
-    public int compare(CatalogItem<?, ?> o1, CatalogItem<?, ?> o2) {
-        return -o1.getVersion().compareTo(o2.getVersion());
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1a9d0e30/usage/jsgui/src/main/webapp/assets/js/view/catalog.js
----------------------------------------------------------------------
diff --git a/usage/jsgui/src/main/webapp/assets/js/view/catalog.js b/usage/jsgui/src/main/webapp/assets/js/view/catalog.js
index cf14684..2d6aa8b 100644
--- a/usage/jsgui/src/main/webapp/assets/js/view/catalog.js
+++ b/usage/jsgui/src/main/webapp/assets/js/view/catalog.js
@@ -319,7 +319,6 @@ define([
                     isChild: isChild,
                     extraClasses: (activeDetailsView == this.name && model.cid == this.activeCid) ? "active" : ""
                 }, this.entryTemplateArgs(model));
-            console.log(args);
             return this.template(args);
         },
 
@@ -376,9 +375,8 @@ define([
             var orderedIds = _.uniq(this.collection.map(symbolicNameFn), true);
 
             function getLatestStableVersion(items) {
-                //TODO implement more sophisticated "default" version selection
-                //Could let the server choose it
-                return items[items.length-1];
+                //the server sorts items by descending version, snapshots at the back
+                return items[0];
             }
 
             var catalogTree = orderedIds.map(function(symbolicName) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/1a9d0e30/usage/rest-server/src/main/java/brooklyn/rest/resources/CatalogResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/resources/CatalogResource.java b/usage/rest-server/src/main/java/brooklyn/rest/resources/CatalogResource.java
index 188825f..ad1324d 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/resources/CatalogResource.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/resources/CatalogResource.java
@@ -39,6 +39,7 @@ import brooklyn.catalog.CatalogItem;
 import brooklyn.catalog.CatalogPredicates;
 import brooklyn.catalog.internal.BasicBrooklynCatalog;
 import brooklyn.catalog.internal.CatalogDto;
+import brooklyn.catalog.internal.CatalogItemComparator;
 import brooklyn.catalog.internal.CatalogUtils;
 import brooklyn.entity.Entity;
 import brooklyn.entity.proxying.EntitySpec;
@@ -48,7 +49,6 @@ import brooklyn.rest.api.CatalogApi;
 import brooklyn.rest.domain.ApiError;
 import brooklyn.rest.domain.CatalogEntitySummary;
 import brooklyn.rest.domain.CatalogItemSummary;
-import brooklyn.rest.domain.SummaryComparators;
 import brooklyn.rest.transform.CatalogTransformer;
 import brooklyn.rest.util.WebResourceUtils;
 import brooklyn.util.ResourceUtils;
@@ -62,6 +62,8 @@ import com.google.common.base.Function;
 import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
 import com.google.common.io.Files;
 import com.sun.jersey.core.header.FormDataContentDisposition;
 
@@ -236,10 +238,11 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
         if (Strings.isNonEmpty(fragment))
             filters.add(CatalogPredicates.xml(StringPredicates.containsLiteralIgnoreCase(fragment)));
 
-        return FluentIterable.from(brooklyn().getCatalog().getCatalogItems())
-                .filter(Predicates.and(filters))
-                .transform(TO_CATALOG_ITEM_SUMMARY)
-                .toSortedList(SummaryComparators.displayNameComparator());
+        ImmutableList<CatalogItem<Object, Object>> sortedItems =
+                FluentIterable.from(brooklyn().getCatalog().getCatalogItems())
+                    .filter(Predicates.and(filters))
+                    .toSortedList(CatalogItemComparator.INSTANCE);
+        return Lists.transform(sortedItems, TO_CATALOG_ITEM_SUMMARY);
     }
 
     @Override