summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorAlexey Fansky <alexey.fansky@effective-soft.com>2015-03-04 13:23:42 -0800
committerVaadin Code Review <review@vaadin.com>2015-03-10 09:11:45 +0000
commit9086245a6d2052fe813b3ef4296c686aad82b244 (patch)
tree664d05c718efdc8fa8ca7929ed97d35c6a833960 /server
parenteee3c6be22e583752748acea31255b27fde27fdf (diff)
downloadvaadin-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.java21
-rw-r--r--server/tests/src/com/vaadin/tests/design/ComponentFactoryTest.java25
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 {
+ }
}