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/15 02:03:40 UTC
[1/3] incubator-brooklyn git commit: Catalog item comparator -
implement custom
Repository: incubator-brooklyn
Updated Branches:
refs/heads/master c4061feaf -> f14331054
Catalog item comparator - implement custom
The NaturalOrderComparator leads to unexpected sort order (i.e 0.0.0_SNAPSHOT and 0.0.1-SNAPSHOT-20141111114709760). OSGi's Version class and other semver java implementations are too strict.
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/253583e8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/253583e8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/253583e8
Branch: refs/heads/master
Commit: 253583e8cc68c8edf8bee5c725497bd393b8be02
Parents: fa7ba6f
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Sat Nov 15 00:13:22 2014 +0200
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Sat Nov 15 00:28:05 2014 +0200
----------------------------------------------------------------------
.../catalog/internal/CatalogItemComparator.java | 65 ++++++++++++++++++--
.../internal/CatalogItemComparatorTest.java | 46 ++++++++++++++
2 files changed, 105 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/253583e8/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
index d8a2b2e..5d1e108 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogItemComparator.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogItemComparator.java
@@ -21,7 +21,6 @@ package brooklyn.catalog.internal;
import java.util.Comparator;
import brooklyn.catalog.CatalogItem;
-import brooklyn.util.text.NaturalOrderComparator;
/**
* When using the comparator to sort - first using symbolicName
@@ -38,12 +37,15 @@ public class CatalogItemComparator implements Comparator<CatalogItem<?, ?>> {
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);
+ String v1 = o1.getVersion();
+ String v2 = o2.getVersion();
+
+ boolean isV1Snapshot = v1.toUpperCase().contains(SNAPSHOT);
+ boolean isV2Snapshot = v2.toUpperCase().contains(SNAPSHOT);
if (isV1Snapshot == isV2Snapshot) {
- return -NaturalOrderComparator.INSTANCE.compare(v1, v2);
+ String[] v1Parts = v1.split("[^\\d]", 4);
+ String[] v2Parts = v2.split("[^\\d]", 4);
+ return -compare(v1Parts, v2Parts);
} else if (isV1Snapshot) {
return 1;
} else {
@@ -51,4 +53,55 @@ public class CatalogItemComparator implements Comparator<CatalogItem<?, ?>> {
}
}
}
+
+ private int compare(String[] v1Parts, String[] v2Parts) {
+ int len = Math.max(v1Parts.length, v2Parts.length);
+ for (int i = 0; i < len; i++) {
+ if (i == v1Parts.length) {
+ return -1;
+ }
+ if (i == v2Parts.length) {
+ return 1;
+ }
+
+ String p1 = v1Parts[i];
+ String p2 = v2Parts[i];
+ int n1 = parse(p1);
+ int n2 = parse(p2);
+ if (n1 != -1 && n2 != -1) {
+ if (n1 != n2) {
+ return compare(n1, n2);
+ }
+ } else if (n1 == -1 && n2 != -1) {
+ return 1;
+ } else if (n1 != -1 && n2 == -1) {
+ return -1;
+ } else {
+ int cmp = p1.compareTo(p2);
+ if (cmp != 0) {
+ return cmp;
+ }
+ }
+ }
+ return 0;
+ }
+
+ //Replace with Integer.compare in J7
+ private int compare(int n1, int n2) {
+ if (n1 == n2) {
+ return 0;
+ } else if (n1 < n2) {
+ return -1;
+ } else {
+ return 1;
+ }
+ }
+
+ private int parse(String p) {
+ try {
+ return Integer.parseInt(p);
+ } catch (NumberFormatException e) {
+ return -1;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/253583e8/core/src/test/java/brooklyn/catalog/internal/CatalogItemComparatorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/catalog/internal/CatalogItemComparatorTest.java b/core/src/test/java/brooklyn/catalog/internal/CatalogItemComparatorTest.java
new file mode 100644
index 0000000..56ee998
--- /dev/null
+++ b/core/src/test/java/brooklyn/catalog/internal/CatalogItemComparatorTest.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package brooklyn.catalog.internal;
+
+import static org.testng.Assert.assertEquals;
+
+import org.testng.annotations.Test;
+
+import brooklyn.catalog.CatalogItem;
+
+public class CatalogItemComparatorTest {
+
+ @Test
+ public void testComparison() {
+ CatalogItemComparator cmp = CatalogItemComparator.INSTANCE;
+ assertEquals(cmp.compare(v("0.0.1"), v("0.0.2")), 1);
+ assertEquals(cmp.compare(v("0.0.2"), v("0.0.1")), -1);
+ assertEquals(cmp.compare(v("0.0.1-qual"), v("0.0.2")), 1);
+ assertEquals(cmp.compare(v("0.0.1-qual"), v("0.0.1_qual")), 0);
+ assertEquals(cmp.compare(v("0.0.1"), v("0.0.2-SNAPSHOT")), -1);
+ assertEquals(cmp.compare(v("0.0.0_SNAPSHOT"), v("0.0.1-SNAPSHOT-20141111114709760")), 1);
+ assertEquals(cmp.compare(v("2.0"), v("2.0.1-BUILD")), 1);
+ assertEquals(cmp.compare(v("2.0"), v("2.0-BUILD")), 1);
+ assertEquals(cmp.compare(v("2.1"), v("2.0-BUILD")), -1);
+ }
+
+ private CatalogItem<?, ?> v(String version) {
+ return CatalogItemBuilder.newEntity("xxx", version).build();
+ }
+}
[3/3] incubator-brooklyn git commit: This closes #331
Posted by he...@apache.org.
This closes #331
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/f1433105
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/f1433105
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/f1433105
Branch: refs/heads/master
Commit: f14331054b92fafa98d890a1679d672a45f48238
Parents: c4061fe 5868b7d
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Sat Nov 15 01:03:07 2014 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Sat Nov 15 01:03:07 2014 +0000
----------------------------------------------------------------------
.../catalog/internal/CatalogItemComparator.java | 65 ++++++++++++++++++--
.../internal/CatalogItemComparatorTest.java | 46 ++++++++++++++
.../software/MachineLifecycleEffectorTasks.java | 8 ++-
3 files changed, 112 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
[2/3] incubator-brooklyn git commit: Fix NPE on creating entities
with no explicit location
Posted by he...@apache.org.
Fix NPE on creating entities with no explicit location
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/5868b7d6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/5868b7d6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/5868b7d6
Branch: refs/heads/master
Commit: 5868b7d65a247512cb14d78f0406ca7de52eb508
Parents: 253583e
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Sat Nov 15 00:14:28 2014 +0200
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Sat Nov 15 00:28:10 2014 +0200
----------------------------------------------------------------------
.../entity/software/MachineLifecycleEffectorTasks.java | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5868b7d6/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java b/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
index 65b0428..8381e99 100644
--- a/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
+++ b/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
@@ -152,12 +152,18 @@ public abstract class MachineLifecycleEffectorTasks {
return new EffectorBody<Void>() {
@Override
public Void call(ConfigBag parameters) {
+ Collection<? extends Location> locations = null;
+
Object locationsRaw = parameters.getStringKey(LOCATIONS.getName());
- Collection<? extends Location> locations = Locations.coerceToCollection(entity().getManagementContext(), locationsRaw);
+ if (locationsRaw != null) {
+ locations = Locations.coerceToCollection(entity().getManagementContext(), locationsRaw);
+ }
+
if (locations==null) {
// null/empty will mean to inherit from parent
locations = Collections.emptyList();
}
+
start(locations);
return null;
}