Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master b0cadef73 -> d53bd189c


PlanToSpecTransformer for old-style xml catalog items

Implement a transformer for items with java type attribute, get the 
functionality out of the camp parser.


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/c71d7227
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/c71d7227
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/c71d7227

Branch: refs/heads/master
Commit: c71d7227dcda9e13c7aaca63cf9624caf48128e7
Parents: 3d415c4
Author: Svetoslav Neykov <[email protected]>
Authored: Thu Oct 8 17:36:15 2015 +0300
Committer: Svetoslav Neykov <[email protected]>
Committed: Wed Oct 14 17:08:53 2015 +0300

----------------------------------------------------------------------
 .../catalog/internal/BasicBrooklynCatalog.java  | 28 +-----
 .../internal/JavaCatalogToSpecTransformer.java  | 89 ++++++++++++++++++++
 ...che.brooklyn.core.plan.PlanToSpecTransformer | 19 +++++
 .../BrooklynComponentTemplateResolver.java      |  9 +-
 .../rest/util/BrooklynRestResourceUtils.java    |  2 +
 5 files changed, 114 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c71d7227/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
 
b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index cc4cffe..9850eca 100644
--- 
a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
+++ 
b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
@@ -21,7 +21,6 @@ package org.apache.brooklyn.core.catalog.internal;
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 
-import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -50,7 +49,6 @@ import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.guava.Maybe;
 import org.apache.brooklyn.util.javalang.AggregateClassLoader;
 import org.apache.brooklyn.util.javalang.LoadedClassLoader;
-import org.apache.brooklyn.util.javalang.Reflections;
 import org.apache.brooklyn.util.text.Strings;
 import org.apache.brooklyn.util.time.Duration;
 import org.apache.brooklyn.util.time.Time;
@@ -327,30 +325,7 @@ public class BasicBrooklynCatalog implements 
BrooklynCatalog {
             }
         }
 
-        // revert to legacy mechanism
-        SpecT spec = null;
-        Method method;
-        try {
-            method = Reflections.findMethod(specType, "create", Class.class);
-        } catch (Exception e) {
-            Exceptions.propagateIfFatal(e);
-            throw new IllegalStateException("Unsupported creation of spec type 
"+specType+"; it must have a public static create(Class) method", e);           
 
-        }
-        try {
-            if (loadedItem.getJavaType()!=null) {
-                @SuppressWarnings("unchecked")
-                SpecT specT = (SpecT) method.invoke(null, 
loadedItem.loadJavaClass(mgmt));
-                spec = specT;
-            }
-        } catch (Exception e) {
-            Exceptions.propagateIfFatal(e);
-            throw new IllegalStateException("Error creating "+specType+" 
"+loadedItem.getJavaType()+": "+e, e);
-        }
-
-        if (spec==null) 
-            throw new IllegalStateException("No known mechanism to create 
instance of "+item);
-
-        return spec;
+        throw new IllegalStateException("No known mechanism to create instance 
of "+item);
     }
 
     @SuppressWarnings("unchecked")
@@ -1101,6 +1076,7 @@ public class BasicBrooklynCatalog implements 
BrooklynCatalog {
             serializer = new CatalogXmlSerializer();
     }
 
+    @Override
     @Deprecated
     public CatalogItem<?,?> getCatalogItemForType(String typeName) {
         final CatalogItem<?,?> resultI;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c71d7227/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
 
b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
new file mode 100644
index 0000000..9b4a83c
--- /dev/null
+++ 
b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java
@@ -0,0 +1,89 @@
+/*
+ * 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 org.apache.brooklyn.core.catalog.internal;
+
+import java.util.Set;
+
+import org.apache.brooklyn.api.catalog.CatalogItem;
+import org.apache.brooklyn.api.entity.Application;
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
+import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.api.policy.PolicySpec;
+import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContext;
+import org.apache.brooklyn.core.plan.PlanNotRecognizedException;
+import org.apache.brooklyn.core.plan.PlanToSpecTransformer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JavaCatalogToSpecTransformer implements PlanToSpecTransformer {
+    private static final Logger log = 
LoggerFactory.getLogger(JavaCatalogToSpecTransformer.class);
+
+    private ManagementContext mgmt;
+
+    @Override
+    public void injectManagementContext(ManagementContext mgmt) {
+        this.mgmt = mgmt;
+    }
+
+    @Override
+    public String getShortDescription() {
+        return "Deprecated java-type catalog items transformer";
+    }
+
+    @Override
+    public boolean accepts(String planType) {
+        return false;
+    }
+
+    @Override
+    public EntitySpec<? extends Application> createApplicationSpec(String 
plan) throws PlanNotRecognizedException {
+        throw new PlanNotRecognizedException(getClass().getName() + " doesn't 
parse application plans.");
+    }
+
+    @Override
+    public <T, SpecT extends AbstractBrooklynObjectSpec<? extends T, SpecT>> 
SpecT createCatalogSpec(
+            CatalogItem<T, SpecT> item, Set<String> encounteredTypes) throws 
PlanNotRecognizedException {
+        if (item.getJavaType() != null) {
+            log.warn("Deprecated functionality (since 0.9.0). Using old-style 
xml catalog items with java type attribute for " + item);
+            BrooklynClassLoadingContext loader = 
CatalogUtils.newClassLoadingContext(mgmt, item);
+            Class<?> type = loader.loadClass(item.getJavaType());
+            AbstractBrooklynObjectSpec<?,?> spec;
+            if (Entity.class.isAssignableFrom(type)) {
+                @SuppressWarnings("unchecked")
+                Class<Entity> entityType = (Class<Entity>)type;
+                spec = EntitySpec.create(entityType);
+            } else if (Policy.class.isAssignableFrom(type)) {
+                @SuppressWarnings("unchecked")
+                Class<Policy> policyType = (Class<Policy>)type;
+                spec = PolicySpec.create(policyType);
+            } else {
+                throw new IllegalStateException("Catalog item " + item + " 
java type " + item.getJavaType() + " is not a Brooklyn supported object.");
+            }
+            @SuppressWarnings("unchecked")
+            SpecT untypedSpc = (SpecT) spec;
+            return untypedSpc;
+        } else {
+            throw new PlanNotRecognizedException(getClass().getName() + " 
parses only old-style catalog items containing javaType");
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c71d7227/core/src/main/resources/META-INF/services/org.apache.brooklyn.core.plan.PlanToSpecTransformer
----------------------------------------------------------------------
diff --git 
a/core/src/main/resources/META-INF/services/org.apache.brooklyn.core.plan.PlanToSpecTransformer
 
b/core/src/main/resources/META-INF/services/org.apache.brooklyn.core.plan.PlanToSpecTransformer
new file mode 100644
index 0000000..f43cda5
--- /dev/null
+++ 
b/core/src/main/resources/META-INF/services/org.apache.brooklyn.core.plan.PlanToSpecTransformer
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+org.apache.brooklyn.core.catalog.internal.JavaCatalogToSpecTransformer

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c71d7227/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
----------------------------------------------------------------------
diff --git 
a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
 
b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
index 914b5e6..f42145d 100644
--- 
a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
+++ 
b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java
@@ -216,12 +216,7 @@ public class BrooklynComponentTemplateResolver {
     }
 
     private String getJavaType() {
-        CatalogItem<Entity, EntitySpec<?>> item = 
typeResolver.getCatalogItem(this, type);
-        if (!isJavaTypePrefix() && item != null && item.getJavaType() != null) 
{
-            return item.getJavaType();
-        } else {
-            return typeResolver.getBrooklynType(type);
-        }
+        return typeResolver.getBrooklynType(type);
     }
 
     public <T extends Entity> EntitySpec<T> resolveSpec(Set<String> 
encounteredCatalogTypes, boolean canUseOtherTransformers) {
@@ -306,7 +301,7 @@ public class BrooklynComponentTemplateResolver {
         // Old-style catalog items (can be defined in catalog.xml only) don't 
have structure, only a single type, so
         // they are loaded as a simple java type, only taking the class name 
from the catalog item instead of the
         // type value in the YAML. Classpath entries in the item are also used 
(through the catalog root classloader).
-        if (isJavaTypePrefix() || item == null || item.getJavaType() != null) {
+        if (isJavaTypePrefix() || item == null) {
             return createSpecFromJavaType();
 
         // Same as above case, but this time force java type loading (either 
as plain class or through an old-style

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c71d7227/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
----------------------------------------------------------------------
diff --git 
a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
 
b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
index cbdf70d..2d6802e 100644
--- 
a/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
+++ 
b/usage/rest-server/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
@@ -209,6 +209,8 @@ public class BrooklynRestResourceUtils {
 
     @SuppressWarnings({ "unchecked", "deprecation" })
     public Application create(ApplicationSpec spec) {
+        log.warn("Using deprecated functionality (as of 0.9.0), 
ApplicationSpec style (pre CAMP plans). " +
+                    "Transition to actively supported spec plans.");
         log.debug("REST creating application instance for {}", spec);
         
         if (!Entitlements.isEntitled(mgmt.getEntitlementManager(), 
Entitlements.DEPLOY_APPLICATION, spec)) {

Reply via email to