diff options
author | Alexey Fansky <alexey.fansky@effective-soft.com> | 2015-03-04 13:23:42 -0800 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2015-03-10 09:11:45 +0000 |
commit | 9086245a6d2052fe813b3ef4296c686aad82b244 (patch) | |
tree | 664d05c718efdc8fa8ca7929ed97d35c6a833960 /server | |
parent | eee3c6be22e583752748acea31255b27fde27fdf (diff) | |
download | vaadin-framework-9086245a6d2052fe813b3ef4296c686aad82b244.tar.gz vaadin-framework-9086245a6d2052fe813b3ef4296c686aad82b244.zip |
Using ComponentFactory in DesignContext.getDefaultInstance() (#16990)
Change-Id: I0bb3e7975f2b48cdc589de740cb07ac893b13461
Diffstat (limited to 'server')
-rw-r--r-- | server/src/com/vaadin/ui/declarative/DesignContext.java | 21 | ||||
-rw-r--r-- | server/tests/src/com/vaadin/tests/design/ComponentFactoryTest.java | 25 |
2 files changed, 36 insertions, 10 deletions
diff --git a/server/src/com/vaadin/ui/declarative/DesignContext.java b/server/src/com/vaadin/ui/declarative/DesignContext.java index 09fefd0a6b..218774c72d 100644 --- a/server/src/com/vaadin/ui/declarative/DesignContext.java +++ b/server/src/com/vaadin/ui/declarative/DesignContext.java @@ -278,16 +278,8 @@ public class DesignContext implements Serializable { Class<? extends Component> componentClass) { Component instance = instanceCache.get(componentClass); if (instance == null) { - try { - instance = componentClass.newInstance(); - instanceCache.put(componentClass, instance); - } catch (InstantiationException e) { - throw new RuntimeException("Could not instantiate " - + componentClass.getName()); - } catch (IllegalAccessException e) { - throw new RuntimeException("Could not instantiate " - + componentClass.getName()); - } + instance = instantiateClass(componentClass.getName()); + instanceCache.put(componentClass, instance); } return instance; } @@ -484,6 +476,15 @@ public class DesignContext implements Serializable { // Extract the package and class names. String qualifiedClassName = tagNameToClassName(node); + return instantiateClass(qualifiedClassName); + } + + /** + * Instantiates given class via ComponentFactory. + * @param qualifiedClassName class name to instantiate + * @return instance of a given class + */ + private Component instantiateClass(String qualifiedClassName) { ComponentFactory factory = Design.getComponentFactory(); Component component = factory.createComponent(qualifiedClassName, this); diff --git a/server/tests/src/com/vaadin/tests/design/ComponentFactoryTest.java b/server/tests/src/com/vaadin/tests/design/ComponentFactoryTest.java index a5f1d288a2..4115872fb7 100644 --- a/server/tests/src/com/vaadin/tests/design/ComponentFactoryTest.java +++ b/server/tests/src/com/vaadin/tests/design/ComponentFactoryTest.java @@ -19,6 +19,8 @@ import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.List; +import com.vaadin.ui.AbstractComponent; +import com.vaadin.ui.TextField; import org.junit.After; import org.junit.Assert; import org.junit.Test; @@ -109,9 +111,32 @@ public class ComponentFactoryTest { Design.read(new ByteArrayInputStream("<v-label />".getBytes())); } + @Test + public void testGetDefaultInstanceUsesComponentFactory() { + final List<String> classes = new ArrayList<String>(); + currentComponentFactory.set(new ComponentFactory() { + @Override + public Component createComponent(String fullyQualifiedClassName, + DesignContext context) { + classes.add(fullyQualifiedClassName); + return defaultFactory.createComponent(fullyQualifiedClassName, + context); + } + }); + + DesignContext designContext = new DesignContext(); + designContext.getDefaultInstance(new DefaultInstanceTestComponent()); + + Assert.assertEquals("There should be one class requests", 1, classes.size()); + Assert.assertEquals("First class should be DefaultInstanceTestComponent", + DefaultInstanceTestComponent.class.getName(), classes.get(0)); + } + @After public void cleanup() { currentComponentFactory.remove(); } + public static class DefaultInstanceTestComponent extends AbstractComponent { + } } |