# WARNING: head commit changed in the meantime
449487: New Extensibility Concept for Scout
@Extends.pathToContainer is not used when an extension is registered
Change-Id: Ifb7339517316281d62c3856cff542b162648f8e7
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=449487
diff --git a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/extension/ui/form/ExtendFormWithDeepLinkingTest.java b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/extension/ui/form/ExtendFormWithDeepLinkingTest.java
index df363f8..f55b02e 100644
--- a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/extension/ui/form/ExtendFormWithDeepLinkingTest.java
+++ b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/extension/ui/form/ExtendFormWithDeepLinkingTest.java
@@ -25,11 +25,14 @@
import org.eclipse.scout.rt.client.extension.ui.form.fixture.AbstractTemplateGroupsBox.BottomFieldsBox;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.AbstractTemplateGroupsBox.TopFieldsBox;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.ContributedTestField;
+import org.eclipse.scout.rt.client.extension.ui.form.fixture.ExtendedForm;
+import org.eclipse.scout.rt.client.extension.ui.form.fixture.ExtendedFormExtension;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.MultiTemplateUsageForm;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.MultiTemplateUsageForm.MainBox.FirstTemplateBox;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.MultiTemplateUsageForm.MainBox.FirstTemplateBox.MiddleStringField;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.MultiTemplateUsageForm.MainBox.MainBoxStringField;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.MultiTemplateUsageForm.MainBox.SecondTemplateBox;
+import org.eclipse.scout.rt.client.extension.ui.form.fixture.OrigForm;
import org.eclipse.scout.rt.client.extension.ui.form.fixture.TemplateStringFieldExtension;
import org.eclipse.scout.rt.client.ui.form.fields.stringfield.AbstractStringField;
import org.eclipse.scout.rt.shared.extension.IExtensionRegistry;
@@ -268,6 +271,26 @@
assertEquals("A", form.getSecondTemplateBox().getBottomFieldsBox().getBottomStringField().getValue());
}
+ @Test
+ public void testDeepLinkingWithExtendsAnnotationOrigForm() throws Exception {
+ SERVICES.getService(IExtensionRegistry.class).register(ExtendedFormExtension.class);
+
+ OrigForm form = new OrigForm();
+ form.initForm();
+
+ assertTypes(form.getMainBox().getFields(), OrigForm.MainBox.TopBox.class, OrigForm.MainBox.BottomBox.class);
+ }
+
+ @Test
+ public void testDeepLinkingWithExtendsAnnotationExtendedForm() throws Exception {
+ SERVICES.getService(IExtensionRegistry.class).register(ExtendedFormExtension.class);
+
+ ExtendedForm form = new ExtendedForm();
+ form.initForm();
+
+ assertTypes(form.getMainBox().getFields(), ExtendedFormExtension.DetailBox.class, OrigForm.MainBox.TopBox.class, OrigForm.MainBox.BottomBox.class);
+ }
+
protected static void assertTypes(List<?> objects, Class<?>... expectedTypes) {
assertEquals(expectedTypes.length, CollectionUtility.size(objects));
diff --git a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/extension/ui/form/fixture/ExtendedFormExtension.java b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/extension/ui/form/fixture/ExtendedFormExtension.java
new file mode 100644
index 0000000..f4f97f4
--- /dev/null
+++ b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/extension/ui/form/fixture/ExtendedFormExtension.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2015 BSI Business Systems Integration AG.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BSI Business Systems Integration AG - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.scout.rt.client.extension.ui.form.fixture;
+
+import org.eclipse.scout.commons.annotations.Extends;
+import org.eclipse.scout.commons.annotations.Order;
+import org.eclipse.scout.rt.client.extension.ui.form.AbstractFormExtension;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.AbstractGroupBox;
+import org.eclipse.scout.rt.client.ui.form.fields.stringfield.AbstractStringField;
+
+public class ExtendedFormExtension extends AbstractFormExtension<ExtendedForm> {
+
+ public ExtendedFormExtension(ExtendedForm ownerForm) {
+ super(ownerForm);
+ }
+
+ @Order(-10)
+ @Extends(value = ExtendedForm.MainBox.class, pathToContainer = ExtendedForm.class)
+ public class DetailBox extends AbstractGroupBox {
+
+ @Order(10)
+ public class StringField extends AbstractStringField {
+ }
+ }
+}
diff --git a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/extension/ui/form/fixture/OrigForm.java b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/extension/ui/form/fixture/OrigForm.java
index 4af1025..7e23c27 100644
--- a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/extension/ui/form/fixture/OrigForm.java
+++ b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/extension/ui/form/fixture/OrigForm.java
@@ -32,7 +32,7 @@
public OrigForm() throws ProcessingException {
super(false);
m_operations = new ArrayList<String>();
- initConfig();
+ callInitializer();
}
public void logOperation(Class<?> fieldClass, String operation) {
diff --git a/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/extension/ExtensionRegistry.java b/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/extension/ExtensionRegistry.java
index 9696f18..fd30f13 100644
--- a/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/extension/ExtensionRegistry.java
+++ b/org.eclipse.scout.rt.shared/src/org/eclipse/scout/rt/shared/extension/ExtensionRegistry.java
@@ -135,7 +135,16 @@
// 2. try @Extends annotation
Extends extendsAnnotation = getExtendsAnnotation(extensionClass);
if (extendsAnnotation != null) {
- ownerClassIdentifier = new ClassIdentifier(extendsAnnotation.value());
+ int pathToContainerLength = extendsAnnotation.pathToContainer().length;
+ if (pathToContainerLength > 0) {
+ Class[] segments = new Class[pathToContainerLength + 1];
+ System.arraycopy(extendsAnnotation.pathToContainer(), 0, segments, 0, pathToContainerLength);
+ segments[pathToContainerLength] = extendsAnnotation.value();
+ ownerClassIdentifier = new ClassIdentifier(segments);
+ }
+ else {
+ ownerClassIdentifier = new ClassIdentifier(extendsAnnotation.value());
+ }
}
if (ownerClassIdentifier == null) {