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:46 UTC
[13/18] incubator-brooklyn git commit: Catalog versioning -
streamline catalog field initialization
Catalog versioning - streamline catalog field initialization
Implement new requirements for symbolicName, displayName initialization and make the selection logic between fields consistent.
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/65995c68
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/65995c68
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/65995c68
Branch: refs/heads/master
Commit: 65995c689262042bade9941b766f5341d4bd1067
Parents: 497496c
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Wed Nov 12 15:31:26 2014 +0200
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Thu Nov 13 11:49:54 2014 +0200
----------------------------------------------------------------------
.../catalog/internal/BasicBrooklynCatalog.java | 131 ++++++++++++-------
.../brooklyn/catalog/internal/CatalogUtils.java | 2 +-
2 files changed, 82 insertions(+), 51 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/65995c68/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 bc43682..3a21114 100644
--- a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java
@@ -422,8 +422,6 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
private CatalogItemDtoAbstract<?,?> getAbstractCatalogItem(String yaml) {
DeploymentPlan plan = makePlanFromYaml(yaml);
- Collection<CatalogBundle> libraries = Collections.emptyList();
-
@SuppressWarnings("rawtypes")
Maybe<Map> possibleCatalog = plan.getCustomAttribute("brooklyn.catalog", Map.class, true);
MutableMap<String, Object> catalog = MutableMap.of();
@@ -433,6 +431,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
catalog.putAll(catalog2);
}
+ Collection<CatalogBundle> libraries = Collections.emptyList();
Maybe<Object> possibleLibraries = catalog.getMaybe("libraries");
if (possibleLibraries.isAbsent()) possibleLibraries = catalog.getMaybe("brooklyn.libraries");
if (possibleLibraries.isPresentAndNonNull()) {
@@ -441,69 +440,101 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
libraries = CatalogItemDtoAbstract.parseLibraries((Collection<?>) possibleLibraries.get());
}
- String symbolicName;
- String version = null;
+ final String id = (String) catalog.getMaybe("id").orNull();
+ final String version = Strings.toString(catalog.getMaybe("version").orNull());
+ final String symbolicName = (String) catalog.getMaybe("symbolicName").orNull();
+ final String name = (String) catalog.getMaybe("name").orNull();
+ final String displayName = (String) catalog.getMaybe("displayName").orNull();
+ final String description = (String) catalog.getMaybe("description").orNull();
+ final String iconUrl = (String) catalog.getMaybe("iconUrl").orNull();
+ final String iconUrlUnderscore = (String) catalog.getMaybe("icon_url").orNull();
+
+ if ((Strings.isNonBlank(id) || Strings.isNonBlank(symbolicName)) &&
+ Strings.isNonBlank(displayName) &&
+ Strings.isNonBlank(name) && !name.equals(displayName)) {
+ log.warn("Name property will be ignored due to the existence of displayName and at least one of id, symbolicName");
+ }
- symbolicName = (String) catalog.getMaybe("symbolicName").orNull();
- if (Strings.isBlank(symbolicName)) {
- symbolicName = (String) catalog.getMaybe("id").orNull();
- if (Strings.isNonBlank(symbolicName) && CatalogUtils.looksLikeVersionedId(symbolicName)) {
- symbolicName = CatalogUtils.getIdFromVersionedId(symbolicName);
- version = CatalogUtils.getVersionFromVersionedId(symbolicName);
+ final String catalogSymbolicName;
+ if (Strings.isNonBlank(symbolicName)) {
+ catalogSymbolicName = symbolicName;
+ } else if (Strings.isNonBlank(id)) {
+ if (Strings.isNonBlank(id) && CatalogUtils.looksLikeVersionedId(id)) {
+ catalogSymbolicName = CatalogUtils.getIdFromVersionedId(id);
+ } else {
+ catalogSymbolicName = id;
+ }
+ } else if (Strings.isNonBlank(name)) {
+ catalogSymbolicName = name;
+ } else if (Strings.isNonBlank(plan.getName())) {
+ catalogSymbolicName = plan.getName();
+ } else if (plan.getServices().size()==1) {
+ Service svc = Iterables.getOnlyElement(plan.getServices());
+ if (Strings.isBlank(svc.getServiceType())) {
+ throw new IllegalStateException("CAMP service type not expected to be missing for " + svc);
}
+ catalogSymbolicName = svc.getServiceType();
+ } else {
+ log.error("Can't infer catalog item symbolicName from the following plan:\n" + yaml);
+ throw new IllegalStateException("Can't infer catalog item symbolicName from catalog item description");
}
- if (Strings.isBlank(symbolicName))
- symbolicName = (String) catalog.getMaybe("name").orNull();
- // take name from plan if not specified in brooklyn.catalog section not supplied
- if (Strings.isBlank(symbolicName)) {
- symbolicName = plan.getName();
- if (Strings.isBlank(symbolicName)) {
- if (plan.getServices().size()==1) {
- Service svc = Iterables.getOnlyElement(plan.getServices());
- symbolicName = svc.getServiceType();
- }
+
+ final String catalogVersion;
+ if (CatalogUtils.looksLikeVersionedId(id)) {
+ catalogVersion = CatalogUtils.getVersionFromVersionedId(id);
+ if (version != null && !catalogVersion.equals(version)) {
+ throw new IllegalArgumentException("Discrepency between version set in id " + catalogVersion + " and version property " + version);
}
+ } else if (Strings.isNonBlank(version)) {
+ catalogVersion = version;
+ } else {
+ log.warn("No version specified for catalog item " + catalogSymbolicName + ". Using default value.");
+ catalogVersion = null;
}
- Maybe<Object> possibleVersion = catalog.getMaybe("version");
- if (possibleVersion.isAbsent() && Strings.isBlank(version)) {
- throw new IllegalArgumentException("'version' attribute missing in 'brooklyn.catalog' section.");
- } else if (possibleVersion.isPresent()) {
- //could be coalesced to a number - can be one of Integer, Double, String
- String versionProperty = possibleVersion.get().toString();
+ final String catalogDisplayName;
+ if (Strings.isNonBlank(displayName)) {
+ catalogDisplayName = displayName;
+ } else if (Strings.isNonBlank(name)) {
+ catalogDisplayName = name;
+ } else if (Strings.isNonBlank(plan.getName())) {
+ catalogDisplayName = plan.getName();
+ } else {
+ catalogDisplayName = null;
+ }
- if (!Strings.isBlank(version) && !versionProperty.equals(version)) {
- throw new IllegalArgumentException("Discrepency between version set in id/name " + version + " and version property " + versionProperty);
- }
+ final String catalogDescription;
+ if (Strings.isNonBlank(description)) {
+ catalogDescription = description;
+ } else if (Strings.isNonBlank(plan.getDescription())) {
+ catalogDescription = plan.getDescription();
+ } else {
+ catalogDescription = null;
+ }
- version = versionProperty;
+ final String catalogIconUrl;
+ if (Strings.isNonBlank(iconUrl)) {
+ catalogIconUrl = iconUrl;
+ } else if (Strings.isNonBlank(iconUrlUnderscore)) {
+ catalogIconUrl = iconUrlUnderscore;
+ } else {
+ catalogIconUrl = null;
}
CatalogUtils.installLibraries(mgmt, libraries);
- AbstractBrooklynObjectSpec<?, ?> spec = createSpec(plan, CatalogUtils.newClassLoadingContext(mgmt, CatalogUtils.getVersionedId(symbolicName, version), libraries, getRootClassLoader()));
+ String versionedId = CatalogUtils.getVersionedId(catalogSymbolicName, catalogVersion);
+ BrooklynClassLoadingContext loader = CatalogUtils.newClassLoadingContext(mgmt, versionedId, libraries, getRootClassLoader());
+ AbstractBrooklynObjectSpec<?, ?> spec = createSpec(plan, loader);
- CatalogItemBuilder<?> builder = createItemBuilder(spec, symbolicName, version)
+ CatalogItemDtoAbstract<?, ?> dto = createItemBuilder(spec, catalogSymbolicName, catalogVersion)
.libraries(libraries)
- .displayName(plan.getName())
- .description(plan.getDescription())
- .plan(yaml);
-
- // and populate other fields
- Maybe<Object> name = catalog.getMaybe("displayName");
- if (name.isAbsent()) name = catalog.getMaybe("name");
- if (name.isAbsent()) name = Maybe.<Object>fromNullable(plan.getName());
- if (name.isPresent()) builder.displayName((String) name.get());
-
- Maybe<Object> description = catalog.getMaybe("description");
- if (description.isPresent()) builder.description((String)description.get());
-
- Maybe<Object> iconUrl = catalog.getMaybe("iconUrl");
- if (iconUrl.isAbsent()) iconUrl = catalog.getMaybe("icon_url");
- if (iconUrl.isPresent()) builder.iconUrl((String)iconUrl.get());
+ .displayName(catalogDisplayName)
+ .description(catalogDescription)
+ .iconUrl(catalogIconUrl)
+ .plan(yaml)
+ .build();
- CatalogItemDtoAbstract<?, ?> dto = builder.build();
- // Overwrite generated ID
dto.setManagementContext((ManagementContextInternal) mgmt);
return dto;
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/65995c68/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java b/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java
index 24bfe47..cb98dfe 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java
@@ -143,7 +143,7 @@ public class CatalogUtils {
}
public static boolean looksLikeVersionedId(String versionedId) {
- return versionedId.indexOf(VERSION_DELIMITER) != -1;
+ return versionedId != null && versionedId.indexOf(VERSION_DELIMITER) != -1;
}
public static String getIdFromVersionedId(String versionedId) {