Return-Path: X-Original-To: apmail-brooklyn-dev-archive@minotaur.apache.org Delivered-To: apmail-brooklyn-dev-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 5063A17329 for ; Thu, 12 Mar 2015 20:32:45 +0000 (UTC) Received: (qmail 43351 invoked by uid 500); 12 Mar 2015 20:32:22 -0000 Delivered-To: apmail-brooklyn-dev-archive@brooklyn.apache.org Received: (qmail 43268 invoked by uid 500); 12 Mar 2015 20:32:22 -0000 Mailing-List: contact dev-help@brooklyn.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@brooklyn.incubator.apache.org Delivered-To: mailing list dev@brooklyn.incubator.apache.org Received: (qmail 42925 invoked by uid 99); 12 Mar 2015 20:32:22 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 12 Mar 2015 20:32:22 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,T_RP_MATCHES_RCVD X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO mail.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with SMTP; Thu, 12 Mar 2015 20:32:20 +0000 Received: (qmail 42696 invoked by uid 99); 12 Mar 2015 20:32:00 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 12 Mar 2015 20:32:00 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id B0A62E18FF; Thu, 12 Mar 2015 20:32:00 +0000 (UTC) From: neykov To: dev@brooklyn.incubator.apache.org Reply-To: dev@brooklyn.incubator.apache.org References: In-Reply-To: Subject: [GitHub] incubator-brooklyn pull request: Encapsulate all CAMP calls in a s... Content-Type: text/plain Message-Id: <20150312203200.B0A62E18FF@git1-us-west.apache.org> Date: Thu, 12 Mar 2015 20:32:00 +0000 (UTC) X-Virus-Checked: Checked by ClamAV on apache.org Github user neykov commented on a diff in the pull request: https://github.com/apache/incubator-brooklyn/pull/545#discussion_r26341363 --- Diff: core/src/main/java/brooklyn/management/internal/EntityManagementUtils.java --- @@ -82,41 +100,90 @@ return app; } - /** convenience for accessing camp */ - public static Maybe getCampPlatform(ManagementContext mgmt) { - return BrooklynServerConfig.getCampPlatform(mgmt); - } - /** as {@link #createApplication(ManagementContext, EntitySpec)} but for a YAML spec */ - public static T createUnstarted(ManagementContext mgmt, String yaml) { - AssemblyTemplate at = getCampPlatform(mgmt).get().pdp().registerDeploymentPlan( new StringReader(yaml) ); - return createUnstarted(mgmt, at); + public static Application createUnstarted(ManagementContext mgmt, String yaml) { + return createUnstarted(mgmt, new StringReader(yaml)); } - - /** as {@link #createApplication(ManagementContext, EntitySpec)} but for an assembly template */ + + public static Application createUnstarted(ManagementContext mgmt, Reader yaml) { + EntitySpec spec = createEntitySpec(mgmt, yaml); + return createUnstarted(mgmt, spec); + } + + public static EntitySpec createEntitySpec(ManagementContext mgmt, String yaml) { + return createEntitySpec(mgmt, new StringReader(yaml)); + } + + public static EntitySpec createEntitySpec(ManagementContext mgmt, Reader yaml) { + BrooklynClassLoadingContext loader = createDefaultLoader(mgmt); + return createEntitySpec(mgmt, yaml, loader); + } + @SuppressWarnings("unchecked") - public static T createUnstarted(ManagementContext mgmt, AssemblyTemplate at) { - CampPlatform camp = getCampPlatform(mgmt).get(); - AssemblyTemplateInstantiator instantiator; + public static EntitySpec createEntitySpec(ManagementContext mgmt, Reader yaml, BrooklynClassLoadingContext loader) { + return (EntitySpec) createSpec(mgmt, yaml, loader); + } + + private static EntitySpec createEntitySpec(String symbolicName, CampPlatform camp, + DeploymentPlan plan, BrooklynClassLoadingContext loader) { + AssemblyTemplate at = registerDeploymentPlan(camp, plan, loader); + AssemblyTemplateInstantiator instantiator = newInstantiator(at); + if (instantiator instanceof AssemblyTemplateSpecInstantiator) { + return (EntitySpec) ((AssemblyTemplateSpecInstantiator)instantiator).createNestedSpec(at, camp, loader, MutableSet.of(symbolicName)); + } else { + throw new IllegalStateException("Unable to instantiate YAML; incompatible instantiator " + instantiator + " for " + at); + } + } + + public static AbstractBrooklynObjectSpec createSpec(ManagementContext mgmt, String yaml, BrooklynClassLoadingContext loader) { + return createSpec(mgmt, new StringReader(yaml), loader); + } + + public static AbstractBrooklynObjectSpec createSpec(ManagementContext mgmt, Reader yaml, BrooklynClassLoadingContext loader) { + Preconditions.checkNotNull(mgmt, "mgmt"); + Preconditions.checkNotNull(mgmt, "yaml"); + Preconditions.checkNotNull(mgmt, "loader"); + + CampPlatform camp = getCampPlatform(mgmt); + DeploymentPlan plan = parseDeploymentPlan(camp, yaml); + return createSpec(null, mgmt, plan, loader); + } + + private static AbstractBrooklynObjectSpec createSpec(String symbolicName, ManagementContext mgmt, + DeploymentPlan plan, BrooklynClassLoadingContext loader) { + if (isPolicyPlan(plan)) { + return createPolicySpec(plan, loader); + } else { + return createEntitySpec(symbolicName, getCampPlatform(mgmt), plan, loader); --- End diff -- Here is where things go sideways. The method `createEntitySpec` called here is coming from `BasicBrooklynCatalog`, calling into `createNestedSpec`. You should instead use https://github.com/neykov/incubator-brooklyn/commit/55305ea9bf05598a8ac2c811691008818edbf321#diff-b713fc5de648db4fede03fa71cfd1c6fR315 which calls into `AssemblyTemplateSpecInstantiator.createSpec`. --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastructure@apache.org or file a JIRA ticket with INFRA. ---