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/04 15:29:56 UTC
[02/18] git commit: Look in parent entities when looking for a
context catalog id to load classes from.
Look in parent entities when looking for a context catalog id to load classes from.
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/405842d2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/405842d2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/405842d2
Branch: refs/heads/master
Commit: 405842d20aa11d83fe91734ba61b80106f1383bd
Parents: b454beb
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Wed Oct 29 17:34:00 2014 +0200
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Wed Oct 29 17:34:00 2014 +0200
----------------------------------------------------------------------
.../mementos/BrooklynMementoManifest.java | 14 +++--
.../entity/rebind/RebindManagerImpl.java | 39 ++++++++------
.../rebind/dto/BrooklynMementoManifestImpl.java | 35 +++---------
.../rebind/dto/EntityMementoManifestImpl.java | 56 ++++++++++++++++++++
.../AbstractBrooklynMementoPersister.java | 2 +-
.../BrooklynMementoPersisterInMemory.java | 4 +-
.../BrooklynMementoPersisterToMultiFile.java | 4 +-
.../BrooklynMementoPersisterToObjectStore.java | 5 +-
.../entity/rebind/RebindPolicyTest.java | 2 +-
.../main/java/brooklyn/util/text/Strings.java | 10 ++++
10 files changed, 117 insertions(+), 54 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/405842d2/api/src/main/java/brooklyn/mementos/BrooklynMementoManifest.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/mementos/BrooklynMementoManifest.java b/api/src/main/java/brooklyn/mementos/BrooklynMementoManifest.java
index f8a40a6..418c59b 100644
--- a/api/src/main/java/brooklyn/mementos/BrooklynMementoManifest.java
+++ b/api/src/main/java/brooklyn/mementos/BrooklynMementoManifest.java
@@ -22,7 +22,7 @@ import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
-import brooklyn.util.guava.Maybe;
+import brooklyn.entity.trait.Identifiable;
/**
* Represents a manifest of the entities etc in the overall memento.
@@ -30,10 +30,14 @@ import brooklyn.util.guava.Maybe;
* @author aled
*/
public interface BrooklynMementoManifest extends Serializable {
-
- public Map<String, String> getEntityIdToType();
-
- public Map<String, Maybe<String>> getEntityIdToContextCatalogItemId();
+ public interface EntityMementoManifest extends Identifiable{
+ public String getId();
+ public String getType();
+ public String getParent();
+ public String getContextCatalogItemId();
+ }
+
+ public Map<String, EntityMementoManifest> getEntityIdToManifest();
public Map<String, String> getLocationIdToType();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/405842d2/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
index 8eee9eb..2691a5b 100644
--- a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
+++ b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
@@ -73,6 +73,7 @@ import brooklyn.management.internal.ManagementContextInternal;
import brooklyn.management.internal.ManagementTransitionInfo.ManagementTransitionMode;
import brooklyn.mementos.BrooklynMemento;
import brooklyn.mementos.BrooklynMementoManifest;
+import brooklyn.mementos.BrooklynMementoManifest.EntityMementoManifest;
import brooklyn.mementos.BrooklynMementoPersister;
import brooklyn.mementos.BrooklynMementoPersister.LookupContext;
import brooklyn.mementos.BrooklynMementoRawData;
@@ -90,7 +91,6 @@ import brooklyn.util.collections.MutableMap;
import brooklyn.util.exceptions.Exceptions;
import brooklyn.util.exceptions.RuntimeInterruptedException;
import brooklyn.util.flags.FlagUtils;
-import brooklyn.util.guava.Maybe;
import brooklyn.util.javalang.Reflections;
import brooklyn.util.task.BasicExecutionContext;
import brooklyn.util.task.ScheduledTask;
@@ -622,18 +622,18 @@ public class RebindManagerImpl implements RebindManager {
}
// Instantiate entities
- LOG.debug("RebindManager instantiating entities: {}", mementoManifest.getEntityIdToType().keySet());
- for (Map.Entry<String, String> entry : mementoManifest.getEntityIdToType().entrySet()) {
+ LOG.debug("RebindManager instantiating entities: {}", mementoManifest.getEntityIdToManifest().keySet());
+ for (Map.Entry<String, EntityMementoManifest> entry : mementoManifest.getEntityIdToManifest().entrySet()) {
String entityId = entry.getKey();
- String entityType = entry.getValue();
- Maybe<String> contextCatalogItemId = mementoManifest.getEntityIdToContextCatalogItemId().get(entityId);
+ EntityMementoManifest entityManifest = entry.getValue();
+ String contextCatalogItemId = findContextCatalogItemId(mementoManifest.getEntityIdToManifest(), entityManifest);
if (LOG.isTraceEnabled()) LOG.trace("RebindManager instantiating entity {}", entityId);
try {
- Entity entity = newEntity(entityId, entityType, getEntityLoadingContext(entityId, contextCatalogItemId, classLoader, rebindContext));
+ Entity entity = newEntity(entityId, entityManifest.getType(), getLoadingContextFromCatalogItemId(contextCatalogItemId, classLoader, rebindContext));
rebindContext.registerEntity(entityId, entity);
} catch (Exception e) {
- exceptionHandler.onCreateFailed(BrooklynObjectType.ENTITY, entityId, entityType, e);
+ exceptionHandler.onCreateFailed(BrooklynObjectType.ENTITY, entityId, entityManifest.getType(), e);
}
}
@@ -918,31 +918,38 @@ public class RebindManagerImpl implements RebindManager {
}
}
- private BrooklynClassLoadingContext getEntityLoadingContext(String entityId, Maybe<String> contextCatalogItemId, ClassLoader classLoader, RebindContextImpl rebindContext) {
- return getLoadingContextFromCatalogItemId(contextCatalogItemId, classLoader, rebindContext);
+ private String findContextCatalogItemId(Map<String, EntityMementoManifest> entityIdToManifest, EntityMementoManifest entityManifest) {
+ EntityMementoManifest ptr = entityManifest;
+ while (ptr != null) {
+ if (ptr.getContextCatalogItemId() != null) {
+ return ptr.getContextCatalogItemId();
+ }
+ ptr = entityIdToManifest.get(ptr.getParent());
+ }
+ return null;
}
private BrooklynClassLoadingContext getPolicyLoadingContext(String policyId, BrooklynMemento memento, ClassLoader classLoader, RebindContextImpl rebindContext) {
PolicyMemento policyMemento = memento.getPolicyMemento(policyId);
- Maybe<String> contextCatalogItemId = getContextCatalogItemIdFromTags(policyMemento.getTags());
+ String contextCatalogItemId = getContextCatalogItemIdFromTags(policyMemento.getTags());
return getLoadingContextFromCatalogItemId(contextCatalogItemId, classLoader, rebindContext);
}
- private Maybe<String> getContextCatalogItemIdFromTags(Collection<Object> tags) {
+ private String getContextCatalogItemIdFromTags(Collection<Object> tags) {
for (Object obj : tags) {
if (obj instanceof NamedStringTag) {
NamedStringTag tag = (NamedStringTag) obj;
if (BrooklynTags.CONTEXT_CATALOG_ITEM_ID_KIND.equals(tag.getKind())) {
- return Maybe.of(tag.getContents());
+ return tag.getContents();
}
}
}
- return Maybe.absent();
+ return null;
}
- private BrooklynClassLoadingContext getLoadingContextFromCatalogItemId(Maybe<String> catalogItemId, ClassLoader classLoader, RebindContext rebindContext) {
- if (catalogItemId.isPresent()) {
- CatalogItem<?, ?> catalogItem = rebindContext.getCatalogItem(catalogItemId.get());
+ private BrooklynClassLoadingContext getLoadingContextFromCatalogItemId(String catalogItemId, ClassLoader classLoader, RebindContext rebindContext) {
+ if (catalogItemId != null) {
+ CatalogItem<?, ?> catalogItem = rebindContext.getCatalogItem(catalogItemId);
if (catalogItem != null) {
return CatalogUtils.newClassLoadingContext(managementContext, catalogItem);
} else {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/405842d2/core/src/main/java/brooklyn/entity/rebind/dto/BrooklynMementoManifestImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/dto/BrooklynMementoManifestImpl.java b/core/src/main/java/brooklyn/entity/rebind/dto/BrooklynMementoManifestImpl.java
index 6c0fb4e..2b52003 100644
--- a/core/src/main/java/brooklyn/entity/rebind/dto/BrooklynMementoManifestImpl.java
+++ b/core/src/main/java/brooklyn/entity/rebind/dto/BrooklynMementoManifestImpl.java
@@ -25,7 +25,6 @@ import java.util.Map;
import brooklyn.mementos.BrooklynMementoManifest;
import brooklyn.mementos.CatalogItemMemento;
-import brooklyn.util.guava.Maybe;
import com.google.common.collect.Maps;
@@ -39,8 +38,7 @@ public class BrooklynMementoManifestImpl implements BrooklynMementoManifest, Ser
public static class Builder {
protected String brooklynVersion;
- protected final Map<String, String> entityIdToType = Maps.newConcurrentMap();
- protected final Map<String, Maybe<String>> entityIdToContextCatalogItemId = Maps.newConcurrentMap();
+ protected final Map<String, EntityMementoManifest> entityIdToManifest = Maps.newConcurrentMap();
protected final Map<String, String> locationIdToType = Maps.newConcurrentMap();
protected final Map<String, String> policyIdToType = Maps.newConcurrentMap();
protected final Map<String, String> enricherIdToType = Maps.newConcurrentMap();
@@ -50,20 +48,10 @@ public class BrooklynMementoManifestImpl implements BrooklynMementoManifest, Ser
public Builder brooklynVersion(String val) {
brooklynVersion = val; return this;
}
- public Builder entity(String id, String type, String catalogItemId) {
- entityIdToType.put(id, type);
- Maybe<String> catalogItemIdOption;
- if (catalogItemId != null) {
- catalogItemIdOption = Maybe.of(catalogItemId);
- } else {
- catalogItemIdOption = Maybe.absent();
- }
- entityIdToContextCatalogItemId.put(id, catalogItemIdOption);
+ public Builder entity(String id, String type, String parent, String catalogItemId) {
+ entityIdToManifest.put(id, new EntityMementoManifestImpl(id, type, parent, catalogItemId));
return this;
}
- public Builder entities(Map<String, String> vals) {
- entityIdToType.putAll(vals); return this;
- }
public Builder location(String id, String type) {
locationIdToType.put(id, type); return this;
}
@@ -100,8 +88,7 @@ public class BrooklynMementoManifestImpl implements BrooklynMementoManifest, Ser
}
}
- private final Map<String, String> entityIdToType;
- private final Map<String, Maybe<String>> entityIdToContextCatalogItemId;
+ private final Map<String, EntityMementoManifest> entityIdToManifest;
private final Map<String, String> locationIdToType;
private final Map<String, String> policyIdToType;
private final Map<String, String> enricherIdToType;
@@ -109,8 +96,7 @@ public class BrooklynMementoManifestImpl implements BrooklynMementoManifest, Ser
private Map<String, CatalogItemMemento> catalogItems;
private BrooklynMementoManifestImpl(Builder builder) {
- entityIdToType = builder.entityIdToType;
- entityIdToContextCatalogItemId = builder.entityIdToContextCatalogItemId;
+ entityIdToManifest = builder.entityIdToManifest;
locationIdToType = builder.locationIdToType;
policyIdToType = builder.policyIdToType;
enricherIdToType = builder.enricherIdToType;
@@ -119,13 +105,8 @@ public class BrooklynMementoManifestImpl implements BrooklynMementoManifest, Ser
}
@Override
- public Map<String, String> getEntityIdToType() {
- return Collections.unmodifiableMap(entityIdToType);
- }
-
- @Override
- public Map<String, Maybe<String>> getEntityIdToContextCatalogItemId() {
- return Collections.unmodifiableMap(entityIdToContextCatalogItemId);
+ public Map<String, EntityMementoManifest> getEntityIdToManifest() {
+ return Collections.unmodifiableMap(entityIdToManifest);
}
@Override
@@ -165,7 +146,7 @@ public class BrooklynMementoManifestImpl implements BrooklynMementoManifest, Ser
@Override
public boolean isEmpty() {
- return entityIdToType.isEmpty() &&
+ return entityIdToManifest.isEmpty() &&
locationIdToType.isEmpty() &&
policyIdToType.isEmpty() &&
enricherIdToType.isEmpty() &&
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/405842d2/core/src/main/java/brooklyn/entity/rebind/dto/EntityMementoManifestImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/dto/EntityMementoManifestImpl.java b/core/src/main/java/brooklyn/entity/rebind/dto/EntityMementoManifestImpl.java
new file mode 100644
index 0000000..bfec2ca
--- /dev/null
+++ b/core/src/main/java/brooklyn/entity/rebind/dto/EntityMementoManifestImpl.java
@@ -0,0 +1,56 @@
+/*
+ * 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.entity.rebind.dto;
+
+import brooklyn.mementos.BrooklynMementoManifest.EntityMementoManifest;
+
+public class EntityMementoManifestImpl implements EntityMementoManifest {
+ private String id;
+ private String type;
+ private String parentId;
+ private String contextCatalogItemId;
+
+ public EntityMementoManifestImpl(String id, String type, String parentId, String contextCatalogItemId) {
+ this.id = id;
+ this.type = type;
+ this.parentId = parentId;
+ this.contextCatalogItemId = contextCatalogItemId;
+ }
+
+ @Override
+ public String getId() {
+ return id;
+ }
+
+ @Override
+ public String getType() {
+ return type;
+ }
+
+ @Override
+ public String getParent() {
+ return parentId;
+ }
+
+ @Override
+ public String getContextCatalogItemId() {
+ return contextCatalogItemId;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/405842d2/core/src/main/java/brooklyn/entity/rebind/persister/AbstractBrooklynMementoPersister.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/persister/AbstractBrooklynMementoPersister.java b/core/src/main/java/brooklyn/entity/rebind/persister/AbstractBrooklynMementoPersister.java
index ff75aa9..9758213 100644
--- a/core/src/main/java/brooklyn/entity/rebind/persister/AbstractBrooklynMementoPersister.java
+++ b/core/src/main/java/brooklyn/entity/rebind/persister/AbstractBrooklynMementoPersister.java
@@ -56,7 +56,7 @@ public abstract class AbstractBrooklynMementoPersister implements BrooklynMement
public BrooklynMementoManifest loadMementoManifest(RebindExceptionHandler exceptionHandler) {
BrooklynMementoManifestImpl.Builder builder = BrooklynMementoManifestImpl.builder();
for (EntityMemento entity : memento.getEntityMementos().values()) {
- builder.entity(entity.getId(), entity.getType(), getContextCatalogItemId(entity.getTags()));
+ builder.entity(entity.getId(), entity.getType(), entity.getParent(), getContextCatalogItemId(entity.getTags()));
}
for (LocationMemento entity : memento.getLocationMementos().values()) {
builder.location(entity.getId(), entity.getType());
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/405842d2/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterInMemory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterInMemory.java b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterInMemory.java
index 0fdd64b..847dfa7 100644
--- a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterInMemory.java
+++ b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterInMemory.java
@@ -42,6 +42,7 @@ import brooklyn.location.Location;
import brooklyn.management.ManagementContext;
import brooklyn.mementos.BrooklynMemento;
import brooklyn.mementos.BrooklynMementoManifest;
+import brooklyn.mementos.BrooklynMementoManifest.EntityMementoManifest;
import brooklyn.policy.Enricher;
import brooklyn.policy.Policy;
import brooklyn.util.collections.MutableList;
@@ -124,7 +125,8 @@ public class BrooklynMementoPersisterInMemory extends AbstractBrooklynMementoPer
@Override public Entity lookupEntity(String id) {
List<Class<?>> types = MutableList.<Class<?>>builder()
.add(Entity.class, EntityInternal.class, EntityProxy.class)
- .add(loadClass(manifest.getEntityIdToType().get(id)))
+ //TODO Doesn't support loading from catalog item osgi bundles
+ .add(loadClass(manifest.getEntityIdToManifest().get(id).getType()))
.build();
return (Entity) java.lang.reflect.Proxy.newProxyInstance(
classLoader,
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/405842d2/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToMultiFile.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToMultiFile.java b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToMultiFile.java
index eb67ee7..cdd87b8 100644
--- a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToMultiFile.java
+++ b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToMultiFile.java
@@ -48,6 +48,7 @@ import brooklyn.mementos.EntityMemento;
import brooklyn.mementos.LocationMemento;
import brooklyn.mementos.PolicyMemento;
import brooklyn.util.exceptions.Exceptions;
+import brooklyn.util.text.Strings;
import brooklyn.util.time.Duration;
import brooklyn.util.time.Time;
import brooklyn.util.xstream.XmlUtil;
@@ -194,8 +195,9 @@ public class BrooklynMementoPersisterToMultiFile implements BrooklynMementoPersi
String contents = readFile(file);
String id = (String) XmlUtil.xpath(contents, "/entity/id");
String type = (String) XmlUtil.xpath(contents, "/entity/type");
+ String parentId = (String) XmlUtil.xpath(contents, "/entity/parent");
String contextCatalogItemId = (String) XmlUtil.xpath(contents, "/entity/tags/" + NamedStringTag.class.getName().replace("$", "_-") + "[kind='" + BrooklynTags.CONTEXT_CATALOG_ITEM_ID_KIND + "']/contents");
- builder.entity(id, type, contextCatalogItemId);
+ builder.entity(id, type, Strings.emptyToNull(parentId), Strings.emptyToNull(contextCatalogItemId));
} catch (Exception e) {
exceptionHandler.onLoadMementoFailed(BrooklynObjectType.ENTITY, "File "+file, e);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/405842d2/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java
index 6d86a35..09f58b7 100644
--- a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java
+++ b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java
@@ -254,8 +254,9 @@ public class BrooklynMementoPersisterToObjectStore implements BrooklynMementoPer
case ENTITY:
String id = (String) XmlUtil.xpath(contents, "/entity/id");
String objType = (String) XmlUtil.xpath(contents, "/entity/type");
+ String parentId = (String) XmlUtil.xpath(contents, "/entity/parent");
String contextCatalogItemId = (String) XmlUtil.xpath(contents, "/entity/tags/" + NamedStringTag.class.getName().replace("$", "_-") + "[kind='" + BrooklynTags.CONTEXT_CATALOG_ITEM_ID_KIND + "']/contents");
- builder.entity(id, objType, Strings.isEmpty(contextCatalogItemId) ? null : contextCatalogItemId);
+ builder.entity(id, objType, Strings.emptyToNull(parentId), Strings.emptyToNull(contextCatalogItemId));
break;
case LOCATION:
id = (String) XmlUtil.xpath(contents, "/location/id");
@@ -303,7 +304,7 @@ public class BrooklynMementoPersisterToObjectStore implements BrooklynMementoPer
if (LOG.isDebugEnabled()) {
LOG.debug("Loaded memento manifest; took {}; {} entities, {} locations, {} policies, {} enrichers, {} feeds, {} catalog items, from {}", new Object[]{
- Time.makeTimeStringRounded(stopwatch.elapsed(TimeUnit.MILLISECONDS)), result.getEntityIdToType().size(),
+ Time.makeTimeStringRounded(stopwatch.elapsed(TimeUnit.MILLISECONDS)), result.getEntityIdToManifest().size(),
result.getLocationIdToType().size(), result.getPolicyIdToType().size(), result.getEnricherIdToType().size(),
result.getFeedIdToType().size(), result.getCatalogItemMementos().size(),
objectStore.getSummaryName() });
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/405842d2/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java b/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java
index 9e550ed..ef27a94 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java
@@ -141,7 +141,7 @@ public class RebindPolicyTest extends RebindTestFixtureWithApp {
RebindTestUtils.waitForPersisted(origApp);
BrooklynMementoManifest manifest = loadMementoManifest();
- assertFalse(manifest.getEntityIdToType().containsKey(entity.getId()));
+ assertFalse(manifest.getEntityIdToManifest().containsKey(entity.getId()));
assertFalse(manifest.getPolicyIdToType().containsKey(policy.getId()));
assertFalse(manifest.getEnricherIdToType().containsKey(enricher.getId()));
assertFalse(manifest.getLocationIdToType().containsKey(loc.getId()));
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/405842d2/utils/common/src/main/java/brooklyn/util/text/Strings.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/brooklyn/util/text/Strings.java b/utils/common/src/main/java/brooklyn/util/text/Strings.java
index 4c275c9..6e3ec06 100644
--- a/utils/common/src/main/java/brooklyn/util/text/Strings.java
+++ b/utils/common/src/main/java/brooklyn/util/text/Strings.java
@@ -833,4 +833,14 @@ public class Strings {
return replaceAllRegex(x, "\\s+", whitespaceReplacement);
}
+ /**
+ * @return null if var is null or empty string, otherwise return var
+ */
+ public static String emptyToNull(String var) {
+ if (isNonEmpty(var)) {
+ return var;
+ } else {
+ return null;
+ }
+ }
}