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 BAAB5119ED for ; Thu, 21 Aug 2014 16:25:20 +0000 (UTC) Received: (qmail 75849 invoked by uid 500); 21 Aug 2014 16:25:20 -0000 Delivered-To: apmail-brooklyn-dev-archive@brooklyn.apache.org Received: (qmail 75818 invoked by uid 500); 21 Aug 2014 16:25:20 -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 75807 invoked by uid 99); 21 Aug 2014 16:25:20 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 21 Aug 2014 16:25:20 +0000 X-ASF-Spam-Status: No, hits=-2000.7 required=5.0 tests=ALL_TRUSTED,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, 21 Aug 2014 16:24:57 +0000 Received: (qmail 72922 invoked by uid 99); 21 Aug 2014 16:24:55 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 21 Aug 2014 16:24:55 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id DE7569C0766; Thu, 21 Aug 2014 16:24:54 +0000 (UTC) From: aledsage To: dev@brooklyn.incubator.apache.org Reply-To: dev@brooklyn.incubator.apache.org References: In-Reply-To: Subject: [GitHub] incubator-brooklyn pull request: Support for adding YAML defined p... Content-Type: text/plain Message-Id: <20140821162454.DE7569C0766@tyr.zones.apache.org> Date: Thu, 21 Aug 2014 16:24:54 +0000 (UTC) X-Virus-Checked: Checked by ClamAV on apache.org Github user aledsage commented on a diff in the pull request: https://github.com/apache/incubator-brooklyn/pull/124#discussion_r16549863 --- Diff: core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java --- @@ -215,7 +203,56 @@ public void load() { return spec; } - + + @SuppressWarnings("unchecked") + private SpecT createEntitySpec( + CatalogItemDo loadedItem, DeploymentPlan plan) { + CampPlatform camp = BrooklynServerConfig.getCampPlatform(mgmt).get(); + + // TODO should not register new AT each time we instantiate from the same plan; use some kind of cache + AssemblyTemplate at; + BrooklynClassLoadingContext loader = loadedItem.newClassLoadingContext(mgmt); + BrooklynLoaderTracker.setLoader(loader); + try { + at = camp.pdp().registerDeploymentPlan(plan); + } finally { + BrooklynLoaderTracker.unsetLoader(loader); + } + + try { + AssemblyTemplateInstantiator instantiator = at.getInstantiator().newInstance(); + if (instantiator instanceof AssemblyTemplateSpecInstantiator) { + return (SpecT) ((AssemblyTemplateSpecInstantiator)instantiator).createSpec(at, camp); + } + throw new IllegalStateException("Unable to instantiate YAML; incompatible instantiator "+instantiator+" for "+at); + } catch (Exception e) { + throw Exceptions.propagate(e); + } + } + + + @SuppressWarnings("unchecked") + private SpecT createPolicySpec(CatalogItemDo loadedItem, DeploymentPlan plan) { + Object policy = plan.getCustomAttributes().get("policy"); + Map policyConfig; + if (policy instanceof String) { + policyConfig = ImmutableMap.of("type", policy); + } else if (policy instanceof Map) { + policyConfig = (Map) policy; + } else { + throw new IllegalStateException("Policy exepcted to be string or map."); + } + + String policyType = (String) policyConfig.get("type"); --- End diff -- I'd use `checkNotNull(policyConfig.get("type"), "policy type")`, with an `import static guava.Preconditions.checkNotNull`. --- 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. ---