Bugfix for Nested and Replaced FormFields
diff --git a/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.client/src/formdata/client/ui/template/formfield/replace/levels/AbstractMainBox.java b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.client/src/formdata/client/ui/template/formfield/replace/levels/AbstractMainBox.java
new file mode 100644
index 0000000..e1fdd79
--- /dev/null
+++ b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.client/src/formdata/client/ui/template/formfield/replace/levels/AbstractMainBox.java
@@ -0,0 +1,16 @@
+package formdata.client.ui.template.formfield.replace.levels;
+
+import org.eclipse.scout.commons.annotations.FormData;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.AbstractGroupBox;
+
+import formdata.shared.ui.template.formfield.replace.levels.AbstractMainBoxData;
+
+@FormData(value = AbstractMainBoxData.class, sdkCommand = FormData.SdkCommand.CREATE, defaultSubtypeSdkCommand = FormData.DefaultSubtypeSdkCommand.CREATE)
+public abstract class AbstractMainBox extends AbstractGroupBox {
+ public FirstLevel getFirstLevel() {
+ return getFieldByClass(FirstLevel.class);
+ }
+
+ public class FirstLevel extends AbstractTemplateField<Number> {
+ }
+}
diff --git a/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.client/src/formdata/client/ui/template/formfield/replace/levels/AbstractTemplateField.java b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.client/src/formdata/client/ui/template/formfield/replace/levels/AbstractTemplateField.java
new file mode 100644
index 0000000..1806cab
--- /dev/null
+++ b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.client/src/formdata/client/ui/template/formfield/replace/levels/AbstractTemplateField.java
@@ -0,0 +1,35 @@
+package formdata.client.ui.template.formfield.replace.levels;
+
+import java.util.List;
+
+import org.eclipse.scout.commons.annotations.FormData;
+import org.eclipse.scout.commons.holders.IHolder;
+import org.eclipse.scout.rt.client.ui.basic.table.AbstractTable;
+import org.eclipse.scout.rt.client.ui.form.fields.tablefield.AbstractTableField;
+
+import formdata.shared.ui.template.formfield.replace.levels.AbstractTemplateFieldData;
+
+@FormData(value = AbstractTemplateFieldData.class, defaultSubtypeSdkCommand = FormData.DefaultSubtypeSdkCommand.CREATE, sdkCommand = FormData.SdkCommand.USE, genericOrdinal = 0)
+public abstract class AbstractTemplateField<T> extends AbstractTableField<AbstractTemplateField<T>.Table> implements IHolder<List<T>> {
+
+ public class Table extends AbstractTable {
+
+ }
+
+ @FormData
+ @Override
+ public List<T> getValue() {
+ return null;
+ }
+
+ @FormData
+ @Override
+ public void setValue(List<T> o) {
+ }
+
+ @FormData
+ @Override
+ public Class<List<T>> getHolderType() {
+ return null;
+ }
+}
diff --git a/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.client/src/formdata/client/ui/template/formfield/replace/levels/FirstLevelForm.java b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.client/src/formdata/client/ui/template/formfield/replace/levels/FirstLevelForm.java
new file mode 100644
index 0000000..cac6608
--- /dev/null
+++ b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.client/src/formdata/client/ui/template/formfield/replace/levels/FirstLevelForm.java
@@ -0,0 +1,24 @@
+package formdata.client.ui.template.formfield.replace.levels;
+
+import org.eclipse.scout.commons.annotations.FormData;
+import org.eclipse.scout.commons.annotations.Order;
+import org.eclipse.scout.commons.exception.ProcessingException;
+import org.eclipse.scout.rt.client.ui.form.AbstractForm;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.AbstractGroupBox;
+
+import formdata.shared.ui.template.formfield.replace.levels.FirstLevelFormData;
+
+@FormData(value = FirstLevelFormData.class, sdkCommand = FormData.SdkCommand.CREATE)
+public class FirstLevelForm extends AbstractForm {
+
+ public FirstLevelForm() throws ProcessingException {
+ super();
+ }
+
+ @Order(1000.0)
+ public class MainBox extends AbstractGroupBox {
+ public class FirstInnerBox extends AbstractMainBox {
+
+ }
+ }
+}
diff --git a/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.client/src/formdata/client/ui/template/formfield/replace/levels/SecondLevelForm.java b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.client/src/formdata/client/ui/template/formfield/replace/levels/SecondLevelForm.java
new file mode 100644
index 0000000..de1706a
--- /dev/null
+++ b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.client/src/formdata/client/ui/template/formfield/replace/levels/SecondLevelForm.java
@@ -0,0 +1,31 @@
+package formdata.client.ui.template.formfield.replace.levels;
+
+import org.eclipse.scout.commons.annotations.FormData;
+import org.eclipse.scout.commons.annotations.Replace;
+import org.eclipse.scout.commons.exception.ProcessingException;
+
+import formdata.client.ui.template.formfield.replace.levels.FirstLevelForm.MainBox.FirstInnerBox;
+import formdata.shared.ui.template.formfield.replace.levels.SecondLevelFormData;
+
+@FormData(value = SecondLevelFormData.class, sdkCommand = FormData.SdkCommand.CREATE)
+public class SecondLevelForm extends FirstLevelForm {
+
+ public SecondLevelForm() throws ProcessingException {
+ super();
+ }
+
+ @Replace
+ public class SecondInnerBox extends FirstInnerBox {
+ public SecondInnerBox(FirstLevelForm.MainBox m) {
+ m.super();
+ }
+
+ @Replace
+ public class SecondLevel extends FirstLevelForm.MainBox.FirstInnerBox.FirstLevel {
+ public SecondLevel(FirstLevelForm.MainBox.FirstInnerBox m) {
+ m.super();
+ }
+ }
+ }
+
+}
diff --git a/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.client/src/formdata/client/ui/template/formfield/replace/levels/ThirdLevelForm.java b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.client/src/formdata/client/ui/template/formfield/replace/levels/ThirdLevelForm.java
new file mode 100644
index 0000000..b9a3c4b
--- /dev/null
+++ b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.client/src/formdata/client/ui/template/formfield/replace/levels/ThirdLevelForm.java
@@ -0,0 +1,29 @@
+package formdata.client.ui.template.formfield.replace.levels;
+
+import org.eclipse.scout.commons.annotations.FormData;
+import org.eclipse.scout.commons.annotations.Replace;
+import org.eclipse.scout.commons.exception.ProcessingException;
+
+import formdata.shared.ui.template.formfield.replace.levels.ThirdLevelFormData;
+
+@FormData(value = ThirdLevelFormData.class, sdkCommand = FormData.SdkCommand.CREATE)
+public class ThirdLevelForm extends SecondLevelForm {
+
+ public ThirdLevelForm() throws ProcessingException {
+ super();
+ }
+
+ @Replace
+ public class ThirdInnerBox extends SecondInnerBox {
+ public ThirdInnerBox(FirstLevelForm.MainBox m) {
+ super(m);
+ }
+
+ @Replace
+ public class ThirdLevel extends SecondLevelForm.SecondInnerBox.SecondLevel {
+ public ThirdLevel(FirstLevelForm.MainBox.FirstInnerBox m) {
+ super(m);
+ }
+ }
+ }
+}
diff --git a/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/META-INF/MANIFEST.MF b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/META-INF/MANIFEST.MF
index 522d493..438992f 100644
--- a/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/META-INF/MANIFEST.MF
+++ b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/META-INF/MANIFEST.MF
@@ -10,7 +10,8 @@
formdata.shared.services.pages,
formdata.shared.services.process,
formdata.shared.services.process.replace,
- formdata.shared.ui.forms
+ formdata.shared.ui.forms,
+ formdata.shared.ui.template.formfield.replace.levels
Require-Bundle: org.eclipse.core.runtime,
org.eclipse.scout.rt.shared;visibility:=reexport
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
diff --git a/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/src/formdata/shared/ui/template/formfield/replace/levels/AbstractMainBoxData.java b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/src/formdata/shared/ui/template/formfield/replace/levels/AbstractMainBoxData.java
new file mode 100644
index 0000000..b33a227
--- /dev/null
+++ b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/src/formdata/shared/ui/template/formfield/replace/levels/AbstractMainBoxData.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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 formdata.shared.ui.template.formfield.replace.levels;
+
+import javax.annotation.Generated;
+
+import org.eclipse.scout.rt.shared.data.form.fields.AbstractFormFieldData;
+
+/**
+ * <b>NOTE:</b><br>
+ * This class is auto generated by the Scout SDK. No manual modifications recommended.
+ *
+ * @generated
+ */
+@Generated(value = "org.eclipse.scout.sdk.workspace.dto.formdata.FormDataDtoUpdateOperation", comments = "This class is auto generated by the Scout SDK. No manual modifications recommended.")
+public abstract class AbstractMainBoxData extends AbstractFormFieldData {
+
+ private static final long serialVersionUID = 1L;
+
+ public AbstractMainBoxData() {
+ }
+
+ public FirstLevel getFirstLevel() {
+ return getFieldByClass(FirstLevel.class);
+ }
+
+ public static class FirstLevel extends AbstractTemplateFieldData<Number> {
+
+ private static final long serialVersionUID = 1L;
+
+ public FirstLevel() {
+ }
+ }
+}
diff --git a/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/src/formdata/shared/ui/template/formfield/replace/levels/AbstractTemplateFieldData.java b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/src/formdata/shared/ui/template/formfield/replace/levels/AbstractTemplateFieldData.java
new file mode 100644
index 0000000..a290ee0
--- /dev/null
+++ b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/src/formdata/shared/ui/template/formfield/replace/levels/AbstractTemplateFieldData.java
@@ -0,0 +1,19 @@
+package formdata.shared.ui.template.formfield.replace.levels;
+
+import java.util.List;
+
+import javax.annotation.Generated;
+
+import org.eclipse.scout.rt.shared.data.form.fields.AbstractValueFieldData;
+
+/**
+ * <b>NOTE:</b><br>
+ * This class is auto generated by the Scout SDK. No manual modifications recommended.
+ *
+ * @generated
+ */
+@Generated(value = "org.eclipse.scout.sdk.workspace.dto.formdata.FormDataDtoUpdateOperation", comments = "This class is auto generated by the Scout SDK. No manual modifications recommended.")
+public abstract class AbstractTemplateFieldData<T> extends AbstractValueFieldData<List<T>> {
+
+ private static final long serialVersionUID = -1551979337783469107L;
+}
diff --git a/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/src/formdata/shared/ui/template/formfield/replace/levels/FirstLevelFormData.java b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/src/formdata/shared/ui/template/formfield/replace/levels/FirstLevelFormData.java
new file mode 100644
index 0000000..15f0059
--- /dev/null
+++ b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/src/formdata/shared/ui/template/formfield/replace/levels/FirstLevelFormData.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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 formdata.shared.ui.template.formfield.replace.levels;
+
+import javax.annotation.Generated;
+
+import org.eclipse.scout.rt.shared.data.form.AbstractFormData;
+
+/**
+ * <b>NOTE:</b><br>
+ * This class is auto generated by the Scout SDK. No manual modifications recommended.
+ *
+ * @generated
+ */
+@Generated(value = "org.eclipse.scout.sdk.workspace.dto.formdata.FormDataDtoUpdateOperation", comments = "This class is auto generated by the Scout SDK. No manual modifications recommended.")
+public class FirstLevelFormData extends AbstractFormData {
+
+ private static final long serialVersionUID = 1L;
+
+ public FirstLevelFormData() {
+ }
+
+ public FirstInnerBox getFirstInnerBox() {
+ return getFieldByClass(FirstInnerBox.class);
+ }
+
+ public static class FirstInnerBox extends AbstractMainBoxData {
+
+ private static final long serialVersionUID = 1L;
+
+ public FirstInnerBox() {
+ }
+ }
+}
diff --git a/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/src/formdata/shared/ui/template/formfield/replace/levels/SecondLevelFormData.java b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/src/formdata/shared/ui/template/formfield/replace/levels/SecondLevelFormData.java
new file mode 100644
index 0000000..2d3ff34
--- /dev/null
+++ b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/src/formdata/shared/ui/template/formfield/replace/levels/SecondLevelFormData.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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 formdata.shared.ui.template.formfield.replace.levels;
+
+import javax.annotation.Generated;
+
+import org.eclipse.scout.commons.annotations.Replace;
+
+/**
+ * <b>NOTE:</b><br>
+ * This class is auto generated by the Scout SDK. No manual modifications recommended.
+ *
+ * @generated
+ */
+@Generated(value = "org.eclipse.scout.sdk.workspace.dto.formdata.FormDataDtoUpdateOperation", comments = "This class is auto generated by the Scout SDK. No manual modifications recommended.")
+public class SecondLevelFormData extends FirstLevelFormData {
+
+ private static final long serialVersionUID = 1L;
+
+ public SecondLevelFormData() {
+ }
+
+ public SecondInnerBox getSecondInnerBox() {
+ return getFieldByClass(SecondInnerBox.class);
+ }
+
+ @Replace
+ public static class SecondInnerBox extends FirstInnerBox {
+
+ private static final long serialVersionUID = 1L;
+
+ public SecondInnerBox() {
+ }
+
+ public SecondLevel getSecondLevel() {
+ return getFieldByClass(SecondLevel.class);
+ }
+
+ @Replace
+ public static class SecondLevel extends FirstLevel {
+
+ private static final long serialVersionUID = 1L;
+
+ public SecondLevel() {
+ }
+ }
+ }
+}
diff --git a/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/src/formdata/shared/ui/template/formfield/replace/levels/ThirdLevelFormData.java b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/src/formdata/shared/ui/template/formfield/replace/levels/ThirdLevelFormData.java
new file mode 100644
index 0000000..00dfab7
--- /dev/null
+++ b/org.eclipse.scout.sdk.test/resources/operation/formData/formdata.shared/src/formdata/shared/ui/template/formfield/replace/levels/ThirdLevelFormData.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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 formdata.shared.ui.template.formfield.replace.levels;
+
+import javax.annotation.Generated;
+
+import org.eclipse.scout.commons.annotations.Replace;
+
+/**
+ * <b>NOTE:</b><br>
+ * This class is auto generated by the Scout SDK. No manual modifications recommended.
+ *
+ * @generated
+ */
+@Generated(value = "org.eclipse.scout.sdk.workspace.dto.formdata.FormDataDtoUpdateOperation", comments = "This class is auto generated by the Scout SDK. No manual modifications recommended.")
+public class ThirdLevelFormData extends SecondLevelFormData {
+
+ private static final long serialVersionUID = 1L;
+
+ public ThirdLevelFormData() {
+ }
+
+ public ThirdInnerBox getThirdInnerBox() {
+ return getFieldByClass(ThirdInnerBox.class);
+ }
+
+ @Replace
+ public static class ThirdInnerBox extends SecondInnerBox {
+
+ private static final long serialVersionUID = 1L;
+
+ public ThirdInnerBox() {
+ }
+
+ public ThirdLevel getThirdLevel() {
+ return getFieldByClass(ThirdLevel.class);
+ }
+
+ @Replace
+ public static class ThirdLevel extends SecondLevel {
+
+ private static final long serialVersionUID = 1L;
+
+ public ThirdLevel() {
+ }
+ }
+ }
+}
diff --git a/org.eclipse.scout.sdk.test/src/org/eclipse/scout/sdk/internal/test/operation/formdata/NestedMultiLevelFormFieldTest.java b/org.eclipse.scout.sdk.test/src/org/eclipse/scout/sdk/internal/test/operation/formdata/NestedMultiLevelFormFieldTest.java
new file mode 100644
index 0000000..113ef3f
--- /dev/null
+++ b/org.eclipse.scout.sdk.test/src/org/eclipse/scout/sdk/internal/test/operation/formdata/NestedMultiLevelFormFieldTest.java
@@ -0,0 +1,314 @@
+/*******************************************************************************
+ * Copyright (c) 2013 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.sdk.internal.test.operation.formdata;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.scout.sdk.testing.SdkAssert;
+import org.eclipse.scout.sdk.workspace.dto.formdata.FormDataDtoUpdateOperation;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class NestedMultiLevelFormFieldTest extends AbstractSdkTestWithFormDataProject {
+ @Test
+ public void runTests() throws Exception {
+ checkAbstractMainBoxData();
+ checkAbstractTemplateFieldData();
+ checkFirstLevelFormData();
+ checkSecondLevelFormData();
+ checkThirdLevelFormData();
+ }
+
+ private void checkAbstractMainBoxData() throws Exception {
+ IType t = SdkAssert.assertTypeExists("formdata.shared.ui.template.formfield.replace.levels.AbstractMainBoxData");
+
+ IProject sharedProject = getProject("formdata.shared");
+ Assert.assertNotNull(sharedProject);
+
+ FormDataDtoUpdateOperation op = new FormDataDtoUpdateOperation(t);
+ executeBuildAssertNoCompileErrors(op);
+
+ testApiOfAbstractMainBoxData();
+ }
+
+ private void checkAbstractTemplateFieldData() throws Exception {
+ IType t = SdkAssert.assertTypeExists("formdata.shared.ui.template.formfield.replace.levels.AbstractTemplateFieldData");
+
+ IProject sharedProject = getProject("formdata.shared");
+ Assert.assertNotNull(sharedProject);
+
+ FormDataDtoUpdateOperation op = new FormDataDtoUpdateOperation(t);
+ executeBuildAssertNoCompileErrors(op);
+
+ testApiOfAbstractTemplateFieldData();
+ }
+
+ private void checkFirstLevelFormData() throws Exception {
+ IType t = SdkAssert.assertTypeExists("formdata.shared.ui.template.formfield.replace.levels.FirstLevelFormData");
+
+ IProject sharedProject = getProject("formdata.shared");
+ Assert.assertNotNull(sharedProject);
+
+ FormDataDtoUpdateOperation op = new FormDataDtoUpdateOperation(t);
+ executeBuildAssertNoCompileErrors(op);
+
+ testApiOfFirstLevelFormData();
+ }
+
+ private void checkSecondLevelFormData() throws Exception {
+ IType t = SdkAssert.assertTypeExists("formdata.shared.ui.template.formfield.replace.levels.SecondLevelFormData");
+
+ IProject sharedProject = getProject("formdata.shared");
+ Assert.assertNotNull(sharedProject);
+
+ FormDataDtoUpdateOperation op = new FormDataDtoUpdateOperation(t);
+ executeBuildAssertNoCompileErrors(op);
+
+ testApiOfSecondLevelFormData();
+ }
+
+ private void checkThirdLevelFormData() throws Exception {
+ IType t = SdkAssert.assertTypeExists("formdata.shared.ui.template.formfield.replace.levels.ThirdLevelFormData");
+
+ IProject sharedProject = getProject("formdata.shared");
+ Assert.assertNotNull(sharedProject);
+
+ FormDataDtoUpdateOperation op = new FormDataDtoUpdateOperation(t);
+ executeBuildAssertNoCompileErrors(op);
+
+ testApiOfThirdLevelFormData();
+ }
+
+ /**
+ * @Generated with org.eclipse.scout.sdk.testing.codegen.ApiTestGenerator
+ */
+ private void testApiOfAbstractMainBoxData() throws Exception {
+ // type AbstractMainBoxData
+ IType abstractMainBoxData = SdkAssert.assertTypeExists("formdata.shared.ui.template.formfield.replace.levels.AbstractMainBoxData");
+ SdkAssert.assertHasFlags(abstractMainBoxData, 1025);
+ SdkAssert.assertHasSuperTypeSignature(abstractMainBoxData, "QAbstractFormFieldData;");
+ SdkAssert.assertAnnotation(abstractMainBoxData, "javax.annotation.Generated");
+
+ // fields of AbstractMainBoxData
+ SdkAssert.assertEquals("field count of 'AbstractMainBoxData'", 1, abstractMainBoxData.getFields().length);
+ IField serialVersionUID = SdkAssert.assertFieldExist(abstractMainBoxData, "serialVersionUID");
+ SdkAssert.assertHasFlags(serialVersionUID, 26);
+ SdkAssert.assertFieldSignature(serialVersionUID, "J");
+
+ SdkAssert.assertEquals("method count of 'AbstractMainBoxData'", 2, abstractMainBoxData.getMethods().length);
+ IMethod abstractMainBoxData1 = SdkAssert.assertMethodExist(abstractMainBoxData, "AbstractMainBoxData", new String[]{});
+ SdkAssert.assertTrue(abstractMainBoxData1.isConstructor());
+ SdkAssert.assertMethodReturnTypeSignature(abstractMainBoxData1, "V");
+ IMethod getFirstLevel = SdkAssert.assertMethodExist(abstractMainBoxData, "getFirstLevel", new String[]{});
+ SdkAssert.assertMethodReturnTypeSignature(getFirstLevel, "QFirstLevel;");
+
+ SdkAssert.assertEquals("inner types count of 'AbstractMainBoxData'", 1, abstractMainBoxData.getTypes().length);
+ // type FirstLevel
+ IType firstLevel = SdkAssert.assertTypeExists(abstractMainBoxData, "FirstLevel");
+ SdkAssert.assertHasFlags(firstLevel, 9);
+ SdkAssert.assertHasSuperTypeSignature(firstLevel, "QAbstractTemplateFieldData<QNumber;>;");
+
+ // fields of FirstLevel
+ SdkAssert.assertEquals("field count of 'FirstLevel'", 1, firstLevel.getFields().length);
+ IField serialVersionUID1 = SdkAssert.assertFieldExist(firstLevel, "serialVersionUID");
+ SdkAssert.assertHasFlags(serialVersionUID1, 26);
+ SdkAssert.assertFieldSignature(serialVersionUID1, "J");
+
+ SdkAssert.assertEquals("method count of 'FirstLevel'", 1, firstLevel.getMethods().length);
+ IMethod firstLevel1 = SdkAssert.assertMethodExist(firstLevel, "FirstLevel", new String[]{});
+ SdkAssert.assertTrue(firstLevel1.isConstructor());
+ SdkAssert.assertMethodReturnTypeSignature(firstLevel1, "V");
+
+ SdkAssert.assertEquals("inner types count of 'FirstLevel'", 0, firstLevel.getTypes().length);
+ }
+
+ private void testApiOfAbstractTemplateFieldData() throws Exception {
+ // type AbstractTemplateFieldData
+ IType abstractTemplateFieldData = SdkAssert.assertTypeExists("formdata.shared.ui.template.formfield.replace.levels.AbstractTemplateFieldData");
+ SdkAssert.assertHasFlags(abstractTemplateFieldData, 1025);
+ SdkAssert.assertHasSuperTypeSignature(abstractTemplateFieldData, "QAbstractValueFieldData<QList<QT;>;>;");
+ SdkAssert.assertAnnotation(abstractTemplateFieldData, "javax.annotation.Generated");
+
+ // fields of AbstractTemplateFieldData
+ SdkAssert.assertEquals("field count of 'AbstractTemplateFieldData'", 1, abstractTemplateFieldData.getFields().length);
+ IField serialVersionUID = SdkAssert.assertFieldExist(abstractTemplateFieldData, "serialVersionUID");
+ SdkAssert.assertHasFlags(serialVersionUID, 26);
+ SdkAssert.assertFieldSignature(serialVersionUID, "J");
+
+ SdkAssert.assertEquals("method count of 'AbstractTemplateFieldData'", 0, abstractTemplateFieldData.getMethods().length);
+
+ SdkAssert.assertEquals("inner types count of 'AbstractTemplateFieldData'", 0, abstractTemplateFieldData.getTypes().length);
+ }
+
+ private void testApiOfFirstLevelFormData() throws Exception {
+ // type FirstLevelFormData
+ IType firstLevelFormData = SdkAssert.assertTypeExists("formdata.shared.ui.template.formfield.replace.levels.FirstLevelFormData");
+ SdkAssert.assertHasFlags(firstLevelFormData, 1);
+ SdkAssert.assertHasSuperTypeSignature(firstLevelFormData, "QAbstractFormData;");
+ SdkAssert.assertAnnotation(firstLevelFormData, "javax.annotation.Generated");
+
+ // fields of FirstLevelFormData
+ SdkAssert.assertEquals("field count of 'FirstLevelFormData'", 1, firstLevelFormData.getFields().length);
+ IField serialVersionUID = SdkAssert.assertFieldExist(firstLevelFormData, "serialVersionUID");
+ SdkAssert.assertHasFlags(serialVersionUID, 26);
+ SdkAssert.assertFieldSignature(serialVersionUID, "J");
+
+ SdkAssert.assertEquals("method count of 'FirstLevelFormData'", 2, firstLevelFormData.getMethods().length);
+ IMethod firstLevelFormData1 = SdkAssert.assertMethodExist(firstLevelFormData, "FirstLevelFormData", new String[]{});
+ SdkAssert.assertTrue(firstLevelFormData1.isConstructor());
+ SdkAssert.assertMethodReturnTypeSignature(firstLevelFormData1, "V");
+ IMethod getFirstInnerBox = SdkAssert.assertMethodExist(firstLevelFormData, "getFirstInnerBox", new String[]{});
+ SdkAssert.assertMethodReturnTypeSignature(getFirstInnerBox, "QFirstInnerBox;");
+
+ SdkAssert.assertEquals("inner types count of 'FirstLevelFormData'", 1, firstLevelFormData.getTypes().length);
+ // type FirstInnerBox
+ IType firstInnerBox = SdkAssert.assertTypeExists(firstLevelFormData, "FirstInnerBox");
+ SdkAssert.assertHasFlags(firstInnerBox, 9);
+ SdkAssert.assertHasSuperTypeSignature(firstInnerBox, "QAbstractMainBoxData;");
+
+ // fields of FirstInnerBox
+ SdkAssert.assertEquals("field count of 'FirstInnerBox'", 1, firstInnerBox.getFields().length);
+ IField serialVersionUID1 = SdkAssert.assertFieldExist(firstInnerBox, "serialVersionUID");
+ SdkAssert.assertHasFlags(serialVersionUID1, 26);
+ SdkAssert.assertFieldSignature(serialVersionUID1, "J");
+
+ SdkAssert.assertEquals("method count of 'FirstInnerBox'", 1, firstInnerBox.getMethods().length);
+ IMethod firstInnerBox1 = SdkAssert.assertMethodExist(firstInnerBox, "FirstInnerBox", new String[]{});
+ SdkAssert.assertTrue(firstInnerBox1.isConstructor());
+ SdkAssert.assertMethodReturnTypeSignature(firstInnerBox1, "V");
+
+ SdkAssert.assertEquals("inner types count of 'FirstInnerBox'", 0, firstInnerBox.getTypes().length);
+ }
+
+ private void testApiOfSecondLevelFormData() throws Exception {
+ // type SecondLevelFormData
+ IType secondLevelFormData = SdkAssert.assertTypeExists("formdata.shared.ui.template.formfield.replace.levels.SecondLevelFormData");
+ SdkAssert.assertHasFlags(secondLevelFormData, 1);
+ SdkAssert.assertHasSuperTypeSignature(secondLevelFormData, "QFirstLevelFormData;");
+ SdkAssert.assertAnnotation(secondLevelFormData, "javax.annotation.Generated");
+
+ // fields of SecondLevelFormData
+ SdkAssert.assertEquals("field count of 'SecondLevelFormData'", 1, secondLevelFormData.getFields().length);
+ IField serialVersionUID = SdkAssert.assertFieldExist(secondLevelFormData, "serialVersionUID");
+ SdkAssert.assertHasFlags(serialVersionUID, 26);
+ SdkAssert.assertFieldSignature(serialVersionUID, "J");
+
+ SdkAssert.assertEquals("method count of 'SecondLevelFormData'", 2, secondLevelFormData.getMethods().length);
+ IMethod secondLevelFormData1 = SdkAssert.assertMethodExist(secondLevelFormData, "SecondLevelFormData", new String[]{});
+ SdkAssert.assertTrue(secondLevelFormData1.isConstructor());
+ SdkAssert.assertMethodReturnTypeSignature(secondLevelFormData1, "V");
+ IMethod getSecondInnerBox = SdkAssert.assertMethodExist(secondLevelFormData, "getSecondInnerBox", new String[]{});
+ SdkAssert.assertMethodReturnTypeSignature(getSecondInnerBox, "QSecondInnerBox;");
+
+ SdkAssert.assertEquals("inner types count of 'SecondLevelFormData'", 1, secondLevelFormData.getTypes().length);
+ // type SecondInnerBox
+ IType secondInnerBox = SdkAssert.assertTypeExists(secondLevelFormData, "SecondInnerBox");
+ SdkAssert.assertHasFlags(secondInnerBox, 9);
+ SdkAssert.assertHasSuperTypeSignature(secondInnerBox, "QFirstInnerBox;");
+ SdkAssert.assertAnnotation(secondInnerBox, "org.eclipse.scout.commons.annotations.Replace");
+
+ // fields of SecondInnerBox
+ SdkAssert.assertEquals("field count of 'SecondInnerBox'", 1, secondInnerBox.getFields().length);
+ IField serialVersionUID1 = SdkAssert.assertFieldExist(secondInnerBox, "serialVersionUID");
+ SdkAssert.assertHasFlags(serialVersionUID1, 26);
+ SdkAssert.assertFieldSignature(serialVersionUID1, "J");
+
+ SdkAssert.assertEquals("method count of 'SecondInnerBox'", 2, secondInnerBox.getMethods().length);
+ IMethod secondInnerBox1 = SdkAssert.assertMethodExist(secondInnerBox, "SecondInnerBox", new String[]{});
+ SdkAssert.assertTrue(secondInnerBox1.isConstructor());
+ SdkAssert.assertMethodReturnTypeSignature(secondInnerBox1, "V");
+ IMethod getSecondLevel = SdkAssert.assertMethodExist(secondInnerBox, "getSecondLevel", new String[]{});
+ SdkAssert.assertMethodReturnTypeSignature(getSecondLevel, "QSecondLevel;");
+
+ SdkAssert.assertEquals("inner types count of 'SecondInnerBox'", 1, secondInnerBox.getTypes().length);
+ // type SecondLevel
+ IType secondLevel = SdkAssert.assertTypeExists(secondInnerBox, "SecondLevel");
+ SdkAssert.assertHasFlags(secondLevel, 9);
+ SdkAssert.assertHasSuperTypeSignature(secondLevel, "QFirstLevel;");
+ SdkAssert.assertAnnotation(secondLevel, "org.eclipse.scout.commons.annotations.Replace");
+
+ // fields of SecondLevel
+ SdkAssert.assertEquals("field count of 'SecondLevel'", 1, secondLevel.getFields().length);
+ IField serialVersionUID2 = SdkAssert.assertFieldExist(secondLevel, "serialVersionUID");
+ SdkAssert.assertHasFlags(serialVersionUID2, 26);
+ SdkAssert.assertFieldSignature(serialVersionUID2, "J");
+
+ SdkAssert.assertEquals("method count of 'SecondLevel'", 1, secondLevel.getMethods().length);
+ IMethod secondLevel1 = SdkAssert.assertMethodExist(secondLevel, "SecondLevel", new String[]{});
+ SdkAssert.assertTrue(secondLevel1.isConstructor());
+ SdkAssert.assertMethodReturnTypeSignature(secondLevel1, "V");
+
+ SdkAssert.assertEquals("inner types count of 'SecondLevel'", 0, secondLevel.getTypes().length);
+ }
+
+ private void testApiOfThirdLevelFormData() throws Exception {
+ // type ThirdLevelFormData
+ IType thirdLevelFormData = SdkAssert.assertTypeExists("formdata.shared.ui.template.formfield.replace.levels.ThirdLevelFormData");
+ SdkAssert.assertHasFlags(thirdLevelFormData, 1);
+ SdkAssert.assertHasSuperTypeSignature(thirdLevelFormData, "QSecondLevelFormData;");
+ SdkAssert.assertAnnotation(thirdLevelFormData, "javax.annotation.Generated");
+
+ // fields of ThirdLevelFormData
+ SdkAssert.assertEquals("field count of 'ThirdLevelFormData'", 1, thirdLevelFormData.getFields().length);
+ IField serialVersionUID = SdkAssert.assertFieldExist(thirdLevelFormData, "serialVersionUID");
+ SdkAssert.assertHasFlags(serialVersionUID, 26);
+ SdkAssert.assertFieldSignature(serialVersionUID, "J");
+
+ SdkAssert.assertEquals("method count of 'ThirdLevelFormData'", 2, thirdLevelFormData.getMethods().length);
+ IMethod thirdLevelFormData1 = SdkAssert.assertMethodExist(thirdLevelFormData, "ThirdLevelFormData", new String[]{});
+ SdkAssert.assertTrue(thirdLevelFormData1.isConstructor());
+ SdkAssert.assertMethodReturnTypeSignature(thirdLevelFormData1, "V");
+ IMethod getThirdInnerBox = SdkAssert.assertMethodExist(thirdLevelFormData, "getThirdInnerBox", new String[]{});
+ SdkAssert.assertMethodReturnTypeSignature(getThirdInnerBox, "QThirdInnerBox;");
+
+ SdkAssert.assertEquals("inner types count of 'ThirdLevelFormData'", 1, thirdLevelFormData.getTypes().length);
+ // type ThirdInnerBox
+ IType thirdInnerBox = SdkAssert.assertTypeExists(thirdLevelFormData, "ThirdInnerBox");
+ SdkAssert.assertHasFlags(thirdInnerBox, 9);
+ SdkAssert.assertHasSuperTypeSignature(thirdInnerBox, "QSecondInnerBox;");
+ SdkAssert.assertAnnotation(thirdInnerBox, "org.eclipse.scout.commons.annotations.Replace");
+
+ // fields of ThirdInnerBox
+ SdkAssert.assertEquals("field count of 'ThirdInnerBox'", 1, thirdInnerBox.getFields().length);
+ IField serialVersionUID1 = SdkAssert.assertFieldExist(thirdInnerBox, "serialVersionUID");
+ SdkAssert.assertHasFlags(serialVersionUID1, 26);
+ SdkAssert.assertFieldSignature(serialVersionUID1, "J");
+
+ SdkAssert.assertEquals("method count of 'ThirdInnerBox'", 2, thirdInnerBox.getMethods().length);
+ IMethod thirdInnerBox1 = SdkAssert.assertMethodExist(thirdInnerBox, "ThirdInnerBox", new String[]{});
+ SdkAssert.assertTrue(thirdInnerBox1.isConstructor());
+ SdkAssert.assertMethodReturnTypeSignature(thirdInnerBox1, "V");
+ IMethod getThirdLevel = SdkAssert.assertMethodExist(thirdInnerBox, "getThirdLevel", new String[]{});
+ SdkAssert.assertMethodReturnTypeSignature(getThirdLevel, "QThirdLevel;");
+
+ SdkAssert.assertEquals("inner types count of 'ThirdInnerBox'", 1, thirdInnerBox.getTypes().length);
+ // type ThirdLevel
+ IType thirdLevel = SdkAssert.assertTypeExists(thirdInnerBox, "ThirdLevel");
+ SdkAssert.assertHasFlags(thirdLevel, 9);
+ SdkAssert.assertHasSuperTypeSignature(thirdLevel, "QSecondLevel;");
+ SdkAssert.assertAnnotation(thirdLevel, "org.eclipse.scout.commons.annotations.Replace");
+
+ // fields of ThirdLevel
+ SdkAssert.assertEquals("field count of 'ThirdLevel'", 1, thirdLevel.getFields().length);
+ IField serialVersionUID2 = SdkAssert.assertFieldExist(thirdLevel, "serialVersionUID");
+ SdkAssert.assertHasFlags(serialVersionUID2, 26);
+ SdkAssert.assertFieldSignature(serialVersionUID2, "J");
+
+ SdkAssert.assertEquals("method count of 'ThirdLevel'", 1, thirdLevel.getMethods().length);
+ IMethod thirdLevel1 = SdkAssert.assertMethodExist(thirdLevel, "ThirdLevel", new String[]{});
+ SdkAssert.assertTrue(thirdLevel1.isConstructor());
+ SdkAssert.assertMethodReturnTypeSignature(thirdLevel1, "V");
+
+ SdkAssert.assertEquals("inner types count of 'ThirdLevel'", 0, thirdLevel.getTypes().length);
+ }
+}
diff --git a/org.eclipse.scout.sdk.test/src/org/eclipse/scout/sdk/internal/test/operation/formdata/_SuiteFormData.java b/org.eclipse.scout.sdk.test/src/org/eclipse/scout/sdk/internal/test/operation/formdata/_SuiteFormData.java
index fd45355..47fef29 100644
--- a/org.eclipse.scout.sdk.test/src/org/eclipse/scout/sdk/internal/test/operation/formdata/_SuiteFormData.java
+++ b/org.eclipse.scout.sdk.test/src/org/eclipse/scout/sdk/internal/test/operation/formdata/_SuiteFormData.java
@@ -22,21 +22,22 @@
*/
@RunWith(Suite.class)
@SuiteClasses({
- AnnotationCopyTest.class,
- ExternalCheckboxFieldTest.class,
- ExternalGroupboxTest.class,
- ExternalTableFieldTest.class,
- FormPropertiesTest.class,
- FormWithGroupboxesTest.class,
- FormWithTemplateTest.class,
- IgnoredFieldsFormTest.class,
- ListBoxFormTest.class,
- ReplaceFormFieldTest.class,
- SimpleFormTest.class,
- TableFieldBeanTest.class,
- TableFieldFormTest.class,
- TableFieldWithIgnoredColumnsTest.class,
- MasterFieldFormDataTest.class
+ AnnotationCopyTest.class,
+ ExternalCheckboxFieldTest.class,
+ ExternalGroupboxTest.class,
+ ExternalTableFieldTest.class,
+ FormPropertiesTest.class,
+ FormWithGroupboxesTest.class,
+ FormWithTemplateTest.class,
+ IgnoredFieldsFormTest.class,
+ ListBoxFormTest.class,
+ ReplaceFormFieldTest.class,
+ SimpleFormTest.class,
+ TableFieldBeanTest.class,
+ TableFieldFormTest.class,
+ TableFieldWithIgnoredColumnsTest.class,
+ MasterFieldFormDataTest.class,
+ NestedMultiLevelFormFieldTest.class
})
public class _SuiteFormData {
diff --git a/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/type/TypeUtility.java b/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/type/TypeUtility.java
index 9cc566b..ce020d2 100644
--- a/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/type/TypeUtility.java
+++ b/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/type/TypeUtility.java
@@ -51,7 +51,6 @@
import org.eclipse.jdt.core.dom.MethodDeclaration;
import org.eclipse.scout.commons.CollectionUtility;
import org.eclipse.scout.commons.CompareUtility;
-import org.eclipse.scout.commons.StringUtility;
import org.eclipse.scout.commons.holders.Holder;
import org.eclipse.scout.sdk.util.NamingUtility;
import org.eclipse.scout.sdk.util.ScoutSdkUtilCore;
@@ -641,25 +640,32 @@
return element != null && element.exists();
}
- public static IType findInnerType(IType type, String innerTypeName) {
- if (type == null) {
+ /**
+ * Searches for an {@link IType} with a specific name within the given type recursively checking all inner types. The
+ * given {@link IType} itself is checked as well.
+ *
+ * @param type
+ * The {@link IType} to start searching. All nested inner {@link IType}s are visited recursively.
+ * @param innerTypeName
+ * The simple name (case sensitive) to search for.
+ * @return The first {@link IType} found in the nested {@link IType} tree below the given start type that has the
+ * given simple name or <code>null</code> if nothing could be found.
+ * @throws JavaModelException
+ */
+ public static IType findInnerType(IType type, String innerTypeName) throws JavaModelException {
+ if (!TypeUtility.exists(type)) {
return null;
}
- else if (StringUtility.equalsIgnoreCase(type.getElementName(), innerTypeName)) {
+ else if (CompareUtility.equals(type.getElementName(), innerTypeName)) {
return type;
}
else {
- try {
- for (IType innerType : type.getTypes()) {
- IType found = findInnerType(innerType, innerTypeName);
- if (found != null) {
- return found;
- }
+ for (IType innerType : type.getTypes()) {
+ IType found = findInnerType(innerType, innerTypeName);
+ if (found != null) {
+ return found;
}
}
- catch (JavaModelException e) {
- SdkUtilActivator.logError("could not find inner type named '" + innerTypeName + "' in type '" + type.getFullyQualifiedName() + "'.", e);
- }
}
return null;
}
diff --git a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/internal/workspace/dto/DtoUtility.java b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/internal/workspace/dto/DtoUtility.java
index 1c7f3b7..409e75b 100644
--- a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/internal/workspace/dto/DtoUtility.java
+++ b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/internal/workspace/dto/DtoUtility.java
@@ -383,7 +383,7 @@
}
// search field data within form data
- IType formDataType = primaryType.getType(formDataName);
+ IType formDataType = TypeUtility.findInnerType(primaryType, formDataName);
if (TypeUtility.exists(formDataType)) {
return formDataType;
}