Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRalf Mollik2018-03-28 11:05:33 +0000
committerRalf Mollik2018-03-28 11:05:33 +0000
commit32d90d392dcb21e2c3c050b32c178e3d8fcc846f (patch)
treeb1e04020fd663b3fc5363a5815eac00a5a4263e2
parentc0752da10abff671be50eefec02e94c1206d547f (diff)
downloadorg.eclipse.osbp.infogrid-32d90d392dcb21e2c3c050b32c178e3d8fcc846f.tar.gz
org.eclipse.osbp.infogrid-32d90d392dcb21e2c3c050b32c178e3d8fcc846f.tar.xz
org.eclipse.osbp.infogrid-32d90d392dcb21e2c3c050b32c178e3d8fcc846f.zip
catch up with branch development
Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
-rw-r--r--org.eclipse.osbp.infogrid.api/META-INF/MANIFEST.MF6
-rw-r--r--org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/ECViewGridEditorFieldFactory.java42
-rw-r--r--org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/GridUtil.java194
-rw-r--r--org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/IECViewGridEditorFieldFactory.java3
-rw-r--r--org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/SingleECViewGridFactory.java298
-rw-r--r--org.eclipse.osbp.infogrid.model.edit/.classpath4
-rw-r--r--org.eclipse.osbp.infogrid.model.edit/.project17
-rw-r--r--org.eclipse.osbp.infogrid.model.edit/META-INF/MANIFEST.MF5
-rw-r--r--org.eclipse.osbp.infogrid.model.edit/plugin.properties1
-rw-r--r--org.eclipse.osbp.infogrid.model.edit/src/org/eclipse/osbp/infogrid/model/gridsource/provider/CxGridSourceEditPlugin.java14
-rw-r--r--org.eclipse.osbp.infogrid.model.edit/src/org/eclipse/osbp/infogrid/model/gridsource/provider/CxGridSourceItemProvider.java24
-rw-r--r--org.eclipse.osbp.infogrid.model/model/gridsource.aird2
-rw-r--r--org.eclipse.osbp.infogrid.model/model/gridsource.ecore2
-rw-r--r--org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/CxGridSource.java28
-rw-r--r--org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/CxGridSourcePackage.java30
-rw-r--r--org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/impl/CxGridSourceImpl.java54
-rw-r--r--org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/impl/CxGridSourcePackageImpl.java11
-rw-r--r--stuff0
18 files changed, 641 insertions, 94 deletions
diff --git a/org.eclipse.osbp.infogrid.api/META-INF/MANIFEST.MF b/org.eclipse.osbp.infogrid.api/META-INF/MANIFEST.MF
index ffaa86f..d40a72d 100644
--- a/org.eclipse.osbp.infogrid.api/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.infogrid.api/META-INF/MANIFEST.MF
@@ -10,9 +10,11 @@ Require-Bundle: org.eclipse.core.runtime,
org.eclipse.osbp.ecview.extension.grid.model;bundle-version="[0.9.0,0.10.0)",
org.eclipse.osbp.ecview.extension.model;bundle-version="[0.9.0,0.10.0)",
org.eclipse.core.databinding.beans;bundle-version="[1.3.100,1.4.0)",
- org.eclipse.core.databinding.property;bundle-version="[1.6.0,1.7.0)"
+ org.eclipse.core.databinding.property;bundle-version="[1.6.0,1.7.0)",
+ org.eclipse.osbp.dsl.datatype.lib;bundle-version="0.9.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Export-Package: org.eclipse.osbp.infogrid.api;version="0.9.0"
-Import-Package: org.osgi.service.component.annotations,
+Import-Package: org.apache.commons.lang3;version="3.4.0",
+ org.osgi.service.component.annotations,
org.slf4j;version="1.7.2"
Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/ECViewGridEditorFieldFactory.java b/org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/ECViewGridEditorFieldFactory.java
index 01f7e99..24d5d69 100644
--- a/org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/ECViewGridEditorFieldFactory.java
+++ b/org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/ECViewGridEditorFieldFactory.java
@@ -10,25 +10,49 @@
* Contributors:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*/
- package org.eclipse.osbp.infogrid.api;
+package org.eclipse.osbp.infogrid.api;
+import java.lang.reflect.Field;
import java.util.Date;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
import org.eclipse.osbp.ecview.core.common.model.core.YField;
import org.eclipse.osbp.ecview.core.extension.model.extension.ExtensionModelFactory;
+import org.eclipse.osbp.ecview.core.extension.model.extension.YComboBox;
import org.eclipse.osbp.infogrid.model.gridsource.CxGridProperty;
+import org.eclipse.osbp.runtime.common.annotations.DtoUtils;
-public class ECViewGridEditorFieldFactory implements
- IECViewGridEditorFieldFactory {
+public class ECViewGridEditorFieldFactory implements IECViewGridEditorFieldFactory {
private ExtensionModelFactory factory = ExtensionModelFactory.eINSTANCE;
@Override
- public YField createEditorField(CxGridProperty prop, Class<?> propertyType) {
+ public YField createEditorField(CxGridProperty prop, Class<?> propertyType, Class<?> rootType) {
+
+ if (GridUtil.isNestedAndBindsDto(rootType, prop)) {
+ // nested field
+ Class<?> nestedType = GridUtil.getDtoType(rootType, prop);
+ // if the first type in the dot path is a dto, we use a combo for
+ // editing
+ if (IDto.class.isAssignableFrom(nestedType)) {
+ YComboBox combo = factory.createYComboBox();
+ combo.setType(nestedType);
+ combo.setTypeQualifiedName(nestedType.getName());
+ combo.setUseBeanService(true);
+
+ Field dkField = DtoUtils.getDomainKeyField(nestedType);
+ if (dkField != null) {
+ combo.setCaptionProperty(dkField.getName());
+ return combo;
+ }
+ // combo will be there, but toString is shown as caption
+ return combo;
+ }
+ }
+
if (propertyType == String.class) {
return factory.createYTextField();
- } else if (propertyType == Integer.class
- || propertyType == Integer.TYPE) {
+ } else if (propertyType == Integer.class || propertyType == Integer.TYPE) {
return factory.createYNumericField();
} else if (propertyType == Short.class || propertyType == Short.TYPE) {
return factory.createYNumericField();
@@ -40,11 +64,9 @@ public class ECViewGridEditorFieldFactory implements
return factory.createYDecimalField();
} else if (propertyType == Long.class || propertyType == Long.TYPE) {
return factory.createYNumericField();
- } else if (propertyType == Character.class
- || propertyType == Character.TYPE) {
+ } else if (propertyType == Character.class || propertyType == Character.TYPE) {
return factory.createYTextField();
- } else if (propertyType == Boolean.class
- || propertyType == Boolean.TYPE) {
+ } else if (propertyType == Boolean.class || propertyType == Boolean.TYPE) {
return factory.createYCheckBox();
} else if (propertyType == Date.class) {
return factory.createYDateTime();
diff --git a/org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/GridUtil.java b/org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/GridUtil.java
new file mode 100644
index 0000000..9bcb179
--- /dev/null
+++ b/org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/GridUtil.java
@@ -0,0 +1,194 @@
+package org.eclipse.osbp.infogrid.api;
+
+import java.lang.reflect.Field;
+
+import org.eclipse.core.databinding.beans.BeanProperties;
+import org.eclipse.osbp.dsl.common.datatypes.IDto;
+import org.eclipse.osbp.infogrid.model.gridsource.CxGridProperty;
+import org.eclipse.osbp.runtime.common.annotations.DtoUtils;
+import org.eclipse.osbp.runtime.common.util.BeanUtils;
+
+public class GridUtil {
+
+ public static boolean isNested(Class<?> rootType, CxGridProperty prop) {
+ return prop.getDotPath() != null && prop.getDotPath().contains(".") || isBindsRawDto(rootType, prop);
+ }
+
+ public static boolean isNestedAndBindsDto(Class<?> rootType, CxGridProperty prop) {
+ if (!isNested(rootType, prop)) {
+ return false;
+ }
+
+ if (prop.getDotPath().contains(".")) {
+ // nested field
+ String[] tokens = prop.getDotPath().split("\\.");
+ Class<?> nestedType = BeanProperties.value(rootType, tokens[0]).getPropertyDescriptor().getPropertyType();
+
+ // if the first type in the dot path is a dto, we use a combo for
+ // editing
+ if (IDto.class.isAssignableFrom(nestedType)) {
+ return true;
+ }
+ } else {
+ return isBindsRawDto(rootType, prop);
+ }
+ return false;
+ }
+
+ /**
+ * Is used to create groups in the grid. A group is defined by the first dto
+ * in the binding path.<br>
+ * Eg: <br>
+ * <ul>
+ * <li>person.<b>country</b> --> "country"</li>
+ * <li>person.<b>country</b>.isoCode --> "country"</li>
+ * <li>person.<b>country</b>.continent --> "country"</li>
+ * <li>person.<b>country</b>.continent.name --> "country"</li>
+ * </ul>
+ *
+ * @param rootType
+ * @param prop
+ * @return
+ */
+ public static String getGroup(Class<?> rootType, CxGridProperty prop) {
+ if (!isNested(rootType, prop)) {
+ return "Main";
+ }
+
+ Class<?> dtoType = getDtoType(rootType, prop);
+ return dtoType.getSimpleName() ;
+ }
+
+ /**
+ * Returns true, if the path or dot path points to a dto.<br>
+ * Eg: person.country<br>
+ * In this case the domainKey property will be attached to the dto path
+ * later. <code>person.country --> person.country.isoCode</code>
+ *
+ * @param rootType
+ * @param prop
+ * @return
+ */
+ public static boolean isBindsRawDto(Class<?> rootType, CxGridProperty prop) {
+
+ Class<?> type = BeanUtils.getNestedFieldType(rootType, prop.getDotPath());
+ // if the first type in the dot path is a dto, we use a combo for
+ // editing
+ if (IDto.class.isAssignableFrom(type)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns the dto type, if the path or dot path points to a dto.<br>
+ * Eg: person.country.continent -> continent is returned<br>
+ *
+ * @param rootType
+ * @param prop
+ * @return
+ */
+ public static Class<?> getBindsRawDtoType(Class<?> rootType, CxGridProperty prop) {
+ if (!isBindsRawDto(rootType, prop)) {
+ throw new IllegalArgumentException("Not a valid call");
+ }
+ Class<?> type = BeanUtils.getNestedFieldType(rootType, prop.getDotPath());
+ return type;
+ }
+
+ /**
+ * Returns true, if the path or dot path points to a dto.<br>
+ * Eg: person.country<br>
+ * In this case the domainKey property will be attached to the dto path
+ * later. <code>person.country --> person.country.isoCode</code>
+ *
+ * @param rootType
+ * @param prop
+ * @return
+ */
+ public static boolean isBindsDomainKey(Class<?> rootType, CxGridProperty prop) {
+ if (isBindsRawDto(rootType, prop)) {
+ return false;
+ }
+ Field field = BeanUtils.getNestedField(rootType, prop.getDotPath());
+ String propName = field.getName();
+
+ Class<?> type = field.getDeclaringClass();
+ return DtoUtils.isDomainkeyField(type, propName);
+ }
+
+ /**
+ * Returns the path which binds the dto. It is used to create a column for
+ * the dto in the grid.<br>
+ * Eg:<br>
+ * Full path: country.continent.name<br>
+ * Dto path: country --> Since country binds the country dto. The tail path
+ * will be continent.name and is used to point the nested converter to the
+ * target property inside the country. country will be added as a column to
+ * the grid.
+ *
+ * @param rootType
+ * @param prop
+ * @return
+ */
+ public static String getDtoBindingPath(Class<?> rootType, CxGridProperty prop) {
+ if (!isNestedAndBindsDto(rootType, prop)) {
+ return prop.getDotPath();
+ }
+
+ String[] tokens = prop.getDotPath().split("\\.");
+ return tokens[0];
+ }
+
+ /**
+ * Returns the tail dot path used to point the NestedConverter to its
+ * property inside the dto.<br>
+ * Eg:<br>
+ * Full path: country.continent.name<br>
+ * Tail path: continent.name --> Since country binds the country dto. So
+ * country will be added as a column to the grid.
+ *
+ * @param rootType
+ * @param prop
+ * @return
+ */
+ public static String getNestedConverterTailDotPath(Class<?> rootType, CxGridProperty prop) {
+ if (!isNestedAndBindsDto(rootType, prop)) {
+ return prop.getDotPath();
+ }
+
+ String[] tokens = prop.getDotPath().split("\\.");
+ if (tokens.length == 1) {
+ return "";
+ }
+ StringBuilder b = new StringBuilder();
+ for (int i = 1; i < tokens.length; i++) {
+ if (b.length() != 0) {
+ b.append(".");
+ }
+ b.append(tokens[i]);
+ }
+ return b.toString();
+ }
+
+ public static Class<?> getDtoType(Class<?> rootType, CxGridProperty prop) {
+ return BeanProperties.value(rootType, getDtoBindingPath(rootType, prop)).getPropertyDescriptor()
+ .getPropertyType();
+ }
+
+ public static Class<?> getPropertyType(Class<?> rootType, CxGridProperty prop) {
+ return BeanProperties.value(rootType, prop.getDotPath()).getPropertyDescriptor()
+ .getPropertyType();
+ }
+
+ public static String getDomainKeyName(Class<?> rootType, CxGridProperty prop) {
+ if (!isBindsRawDto(rootType, prop)) {
+ throw new IllegalStateException("Only dtos have domainkeys");
+ }
+
+ Class<?> type = getBindsRawDtoType(rootType, prop);
+ return DtoUtils.getDomainKeyField(type).getName();
+ }
+
+}
diff --git a/org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/IECViewGridEditorFieldFactory.java b/org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/IECViewGridEditorFieldFactory.java
index 0266703..f9b8edd 100644
--- a/org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/IECViewGridEditorFieldFactory.java
+++ b/org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/IECViewGridEditorFieldFactory.java
@@ -31,8 +31,9 @@ public interface IECViewGridEditorFieldFactory {
*
* @param prop
* @param propertyType
+ * @param rootType
* @return
*/
- YField createEditorField(CxGridProperty prop, Class<?> propertyType);
+ YField createEditorField(CxGridProperty prop, Class<?> propertyType, Class<?> rootType);
}
diff --git a/org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/SingleECViewGridFactory.java b/org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/SingleECViewGridFactory.java
index 52ce909..33d4981 100644
--- a/org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/SingleECViewGridFactory.java
+++ b/org.eclipse.osbp.infogrid.api/src/org/eclipse/osbp/infogrid/api/SingleECViewGridFactory.java
@@ -10,11 +10,17 @@
* Contributors:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*/
- package org.eclipse.osbp.infogrid.api;
+package org.eclipse.osbp.infogrid.api;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import org.apache.commons.lang3.ClassUtils;
import org.eclipse.core.databinding.beans.BeanProperties;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
@@ -24,10 +30,13 @@ import org.eclipse.osbp.ecview.core.common.model.core.YField;
import org.eclipse.osbp.ecview.extension.grid.CxGrid;
import org.eclipse.osbp.ecview.extension.grid.CxGridColumn;
import org.eclipse.osbp.ecview.extension.grid.CxGridFactory;
+import org.eclipse.osbp.ecview.extension.grid.CxGridGroupedCell;
+import org.eclipse.osbp.ecview.extension.grid.CxGridHeaderRow;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridButtonRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridDateRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridImageRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridIndicatorRenderer;
+import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridNestedConverter;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridNumberRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridPriceRenderer;
import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridProgressBarRenderer;
@@ -65,8 +74,7 @@ import org.slf4j.LoggerFactory;
public class SingleECViewGridFactory implements IECViewGridFactory {
- private static final Logger LOGGER = LoggerFactory
- .getLogger(SingleECViewGridFactory.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(SingleECViewGridFactory.class);
private CxGridFactory gridFactory = CxGridFactory.eINSTANCE;
@@ -80,10 +88,8 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
@Override
public CxGrid createGrid(Class<?> inputType, CxGridSource gridSource) {
- BundleContext bc = FrameworkUtil.getBundle(getClass())
- .getBundleContext();
- ServiceReference<IBundleSpace> bsRef = bc
- .getServiceReference(IBundleSpace.class);
+ BundleContext bc = FrameworkUtil.getBundle(getClass()).getBundleContext();
+ ServiceReference<IBundleSpace> bsRef = bc.getServiceReference(IBundleSpace.class);
if (bsRef == null) {
LOGGER.error("No BundleSpace available.");
return gridFactory.createCxGrid();
@@ -94,10 +100,8 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
try {
rootType = bundleSpace.forName(gridSource.getRootTypeFQN());
} catch (ClassNotFoundException e) {
- e.printStackTrace();
+ LOGGER.error("{}", e);
}
- // TODO: check the case "rootType == null". Maybe use a default rootType
- // to continue ...
bc.ungetService(bsRef);
@@ -115,21 +119,157 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
grid.setType(rootType);
grid.setTypeQualifiedName(rootType.getName());
+ List<Info> temp = new ArrayList<>(gridSource.getProperties().size());
+
+ // create the basic infos. In further steps we will group them and
+ // calculate editable states.
+ //
for (CxGridProperty prop : gridSource.getProperties()) {
+
+ Info info = new Info();
+ info.prop = prop;
+ temp.add(info);
+
+ if (GridUtil.isNested(rootType, prop)) {
+ info.group = GridUtil.getGroup(rootType, prop);
+ info.firstNestedDtoType = GridUtil.getDtoType(rootType, prop);
+ info.nested = true;
+ boolean bindsRawDto = GridUtil.isBindsRawDto(rootType, prop);
+ info.rawDtoRef = bindsRawDto;
+ if (bindsRawDto) {
+ info.fullDotPath = prop.getDotPath() + "." + GridUtil.getDomainKeyName(rootType, prop);
+ info.prop.setDotPath(info.fullDotPath);
+ info.domainkey = true;
+ // ATTENTION: Here we need to use the dto type, since
+ // this type is bound to the grid column
+ info.type = GridUtil.getPropertyType(rootType, prop);
+ } else {
+ info.fullDotPath = prop.getDotPath();
+ info.domainkey = GridUtil.isBindsDomainKey(rootType, prop);
+
+ info.type = GridUtil.getPropertyType(rootType, prop);
+ }
+ } else {
+ info.group = "";
+ info.fullDotPath = prop.getDotPath();
+ info.type = GridUtil.getPropertyType(rootType, prop);
+ }
+ }
+
+ // filter double entries and create a map for groupings
+ //
+ Map<String, List<Info>> infoGroup = new HashMap<>();
+ List<Info> infos = new ArrayList<>(gridSource.getProperties().size());
+ Set<String> dotPath = new HashSet<>();
+ for (Info info : temp) {
+ if (dotPath.contains(info.fullDotPath)) {
+ continue;
+ }
+
+ if (!infoGroup.containsKey(info.group)) {
+ infoGroup.put(info.group, new ArrayList<>());
+ }
+
+ List<Info> list = infoGroup.get(info.group);
+ list.add(info);
+
+ dotPath.add(info.fullDotPath);
+ infos.add(info);
+ }
+
+ // check which info is editable. Only one per group is editable.
+ // Preferred the domainkey property
+ for (Map.Entry<String, List<Info>> entry : infoGroup.entrySet()) {
+ boolean domainkeyFound = false;
+ for (Info info : entry.getValue()) {
+
+ if (info.group.equals("")) {
+ // the root group is always editable according its
+ // property
+ info.editable = info.prop.isEditable();
+ continue;
+ }
+
+ if (info.domainkey) {
+ info.editable = true;
+ domainkeyFound = true;
+ break;
+ }
+ }
+ if (!domainkeyFound) {
+ entry.getValue().get(0).editable = true;
+ }
+ }
+
+ // create a header row for the grouped columns
+ //
+ temp = new ArrayList<>(infos);
+ infos.clear();
+ CxGridHeaderRow groupingRow = CxGridFactory.eINSTANCE.createCxGridHeaderRow();
+ grid.getHeaders().add(groupingRow);
+
+ for (String group : infoGroup.keySet()) {
+ CxGridGroupedCell groupedCell = CxGridFactory.eINSTANCE.createCxGridGroupedCell();
+ groupedCell.setId(group + "Group");
+ groupedCell.setName(group + "Group");
+ groupedCell.setLabelI18nKey(group);
+ groupingRow.getGroupings().add(groupedCell);
+
+ // find grouped infos
+ List<Info> groupedCells = temp.stream().filter(info -> info.group.equals(group))
+ .collect(Collectors.toList());
+
+ // and apply the cxGridGroup
+ groupedCells.stream().forEach(info -> info.cxGridGroup = groupedCell);
+
+ infos.addAll(groupedCells);
+ }
+
+ for (Info info : infos) {
+ CxGridProperty prop = info.prop;
CxGridColumn column = gridFactory.createCxGridColumn();
- column.setPropertyPath(prop.getDotPath());
- column.setPropertyId(prop.getDotPath());
+ column.setType(info.type);
+ column.setTypeQualifiedName(info.type.getName());
- Class<?> propertyType = BeanProperties
- .value(rootType, prop.getDotPath())
- .getPropertyDescriptor().getPropertyType();
+ if (info.cxGridGroup != null) {
+ info.cxGridGroup.getGroupables().add(column);
+ }
+
+ if (info.editable) {
+ // we create the column based on the dto and use the
+ // converter to convert to the target property inside the
+ // dto
+ column.setPropertyPath(GridUtil.getDtoBindingPath(rootType, prop));
+ } else {
+ // otherwise we create the column with the fully dto path
+ column.setPropertyPath(prop.getDotPath());
+ }
+ column.setPropertyId(column.getPropertyPath());
+
+ column.setLabelI18nKey(prop.getDotPath());
+
+ Class<?> propertyType = BeanProperties.value(rootType, prop.getDotPath()).getPropertyDescriptor()
+ .getPropertyType();
// editable
- YField yEditorField = getEditorField(prop, propertyType);
- column.setEditable(yEditorField != null);
- column.setEditorField(yEditorField);
+ if (info.editable) {
+ YField yEditorField = getEditorField(prop, propertyType, rootType);
+ column.setEditable(yEditorField != null);
+ column.setEditorField(yEditorField);
+
+ if (info.nested) {
+ // only one nested property is editable. So it needs to
+ // edit the dto by combobox and requires a different
+ // filterPropertyPath.
+ // The bindings property path points directly to the dto
+ column.setEditsDto(true);
+ column.setFilterPropertyPathForEditsDto(info.fullDotPath);
+ }
+ } else {
+ column.setEditable(false);
+ }
- Pair pair = createRendererPair(prop, propertyType);
+ Pair pair = createRendererPair(rootType, prop, propertyType, info);
column.setRenderer(pair.renderer);
column.setConverter(pair.converter);
// column.setMaxWidthPixels(50);
@@ -154,10 +294,11 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
*
* @param prop
* @param propertyType
+ * @param rootType
* @return
*/
- protected YField getEditorField(CxGridProperty prop, Class<?> propertyType) {
- return editorFieldFactory.createEditorField(prop, propertyType);
+ protected YField getEditorField(CxGridProperty prop, Class<?> propertyType, Class<?> rootType) {
+ return editorFieldFactory.createEditorField(prop, propertyType, rootType);
}
protected boolean isEditable(CxGridSource gridSource) {
@@ -174,12 +315,12 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
*
* @param prop
* @param propertyType
+ * @param editable
* @return
*/
- protected Pair createRendererPair(CxGridProperty prop, Class<?> propertyType) {
+ protected Pair createRendererPair(Class<?> rootType, CxGridProperty prop, Class<?> propertyType, Info info) {
Pair pair = new Pair();
-
CxGridRendererFactory factory = CxGridRendererFactory.eINSTANCE;
if (prop.getStyle() == null) {
return createBadRenderer();
@@ -201,19 +342,15 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
if (!isNumeric(propertyType)) {
return createBadRenderer();
}
- CxGridPropNumberStyle style = (CxGridPropNumberStyle) prop
- .getStyle();
- CxGridNumberRenderer renderer = factory
- .createCxGridNumberRenderer();
+ CxGridPropNumberStyle style = (CxGridPropNumberStyle) prop.getStyle();
+ CxGridNumberRenderer renderer = factory.createCxGridNumberRenderer();
renderer.setNumberFormat(style.getNumberFormat());
pair.renderer = renderer;
}
break;
case CxGridStylePackage.CX_GRID_PROP_BUTTON_STYLE: {
- CxGridPropButtonStyle style = (CxGridPropButtonStyle) prop
- .getStyle();
- CxGridButtonRenderer renderer = factory
- .createCxGridButtonRenderer();
+ CxGridPropButtonStyle style = (CxGridPropButtonStyle) prop.getStyle();
+ CxGridButtonRenderer renderer = factory.createCxGridButtonRenderer();
renderer.setEventTopic(style.getEventTopic());
pair.renderer = renderer;
}
@@ -231,19 +368,15 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
pair.renderer = factory.createCxGridHtmlRenderer();
break;
case CxGridStylePackage.CX_GRID_PROP_PROGRESSBAR_STYLE: {
- CxGridPropProgressbarStyle style = (CxGridPropProgressbarStyle) prop
- .getStyle();
- CxGridProgressBarRenderer renderer = factory
- .createCxGridProgressBarRenderer();
+ CxGridPropProgressbarStyle style = (CxGridPropProgressbarStyle) prop.getStyle();
+ CxGridProgressBarRenderer renderer = factory.createCxGridProgressBarRenderer();
renderer.setMaxValue(style.getMaxValue());
pair.renderer = renderer;
}
break;
case CxGridStylePackage.CX_GRID_PROP_INDICATOR_STYLE: {
- CxGridPropIndicatorStyle style = (CxGridPropIndicatorStyle) prop
- .getStyle();
- CxGridIndicatorRenderer renderer = factory
- .createCxGridIndicatorRenderer();
+ CxGridPropIndicatorStyle style = (CxGridPropIndicatorStyle) prop.getStyle();
+ CxGridIndicatorRenderer renderer = factory.createCxGridIndicatorRenderer();
renderer.setGreenStarts(style.getGreenStarts());
renderer.setRedEnds(style.getRedEnds());
pair.renderer = renderer;
@@ -256,10 +389,8 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
pair.renderer = factory.createCxGridHtmlRenderer();
break;
case CxGridStylePackage.CX_GRID_PROP_QUANTITY_STYLE: {
- CxGridPropQuantityStyle style = (CxGridPropQuantityStyle) prop
- .getStyle();
- CxGridQuantityRenderer renderer = factory
- .createCxGridQuantityRenderer();
+ CxGridPropQuantityStyle style = (CxGridPropQuantityStyle) prop.getStyle();
+ CxGridQuantityRenderer renderer = factory.createCxGridQuantityRenderer();
renderer.setHtmlPattern(style.getHtmlPattern());
renderer.setNullRepresentation("");
renderer.setNumberFormat(style.getValueNumberFormat());
@@ -281,14 +412,38 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
break;
}
+ if (info.nested && info.editable) {
+ CxGridNestedConverter nestedConverter = CxGridRendererFactory.eINSTANCE.createCxGridNestedConverter();
+ Class<?> dtoType = GridUtil.getDtoType(rootType, prop);
+ nestedConverter.setBaseType(dtoType);
+ nestedConverter.setBaseTypeQualifiedName(dtoType.getName());
+
+ if (propertyType.isPrimitive()) {
+ propertyType = ClassUtils.primitiveToWrapper(propertyType);
+ }
+ nestedConverter.setNestedType(propertyType);
+ nestedConverter.setNestedTypeQualifiedName(propertyType.getName());
+
+ // we create the column based on the dto and use the
+ // converter to point to the target property inside the dto
+ String nestedConverterTailPath = GridUtil.getNestedConverterTailDotPath(rootType, prop);
+ nestedConverter.setNestedDotPath(nestedConverterTailPath);
+
+ // the nestedConverter needs to use the nested type converter to
+ // convert to the presentation. Eg, the nestedConverter extracts
+ // birthdate from Person and the nestedTypeConverter does pretty
+ // formatting of date
+ nestedConverter.setNestedTypeConverter(pair.converter);
+ pair.converter = nestedConverter;
+ }
+
return pair;
}
protected boolean isNumeric(Class<?> propertyType) {
boolean result = Number.class.isAssignableFrom(propertyType);
if (!result) {
- if (propertyType.isPrimitive() && propertyType != Boolean.TYPE
- && propertyType != Void.TYPE) {
+ if (propertyType.isPrimitive() && propertyType != Boolean.TYPE && propertyType != Void.TYPE) {
result = true;
}
}
@@ -303,14 +458,12 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
CxGridStyleConfig cxConfig = configs.get(0);
if (cxConfig instanceof CxGridStyleConfigStringToResource) {
List<YStringToResourceConfig> newConfigs = toStringToResourceConfig(configs);
- YStringToResourceConverter converter = YConverterFactory.eINSTANCE
- .createYStringToResourceConverter();
+ YStringToResourceConverter converter = YConverterFactory.eINSTANCE.createYStringToResourceConverter();
converter.getConfigs().addAll(newConfigs);
return converter;
} else if (cxConfig instanceof CxGridStyleConfigNumericToResource) {
List<YNumericToResourceConfig> newConfigs = toNumberToResourceConfig(configs);
- YNumericToResourceConverter converter = YConverterFactory.eINSTANCE
- .createYNumericToResourceConverter();
+ YNumericToResourceConverter converter = YConverterFactory.eINSTANCE.createYNumericToResourceConverter();
converter.getConfigs().addAll(newConfigs);
return converter;
}
@@ -318,8 +471,7 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
return null;
}
- private List<YNumericToResourceConfig> toNumberToResourceConfig(
- EList<CxGridStyleConfig> configs) {
+ private List<YNumericToResourceConfig> toNumberToResourceConfig(EList<CxGridStyleConfig> configs) {
List<YNumericToResourceConfig> result = new ArrayList<>(configs.size());
for (CxGridStyleConfig config : configs) {
if (!(config instanceof CxGridStyleConfigNumericToResource)) {
@@ -328,8 +480,7 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
}
CxGridStyleConfigNumericToResource givenConfig = (CxGridStyleConfigNumericToResource) config;
- YNumericToResourceConfig newConfig = YConverterFactory.eINSTANCE
- .createYNumericToResourceConfig();
+ YNumericToResourceConfig newConfig = YConverterFactory.eINSTANCE.createYNumericToResourceConfig();
newConfig.setResourceThemePath(givenConfig.getResourceThemePath());
newConfig.setValue(givenConfig.getValue());
newConfig.setCompare(toGridCompare(givenConfig.getCompare()));
@@ -357,8 +508,7 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
return null;
}
- private List<YStringToResourceConfig> toStringToResourceConfig(
- EList<CxGridStyleConfig> configs) {
+ private List<YStringToResourceConfig> toStringToResourceConfig(EList<CxGridStyleConfig> configs) {
List<YStringToResourceConfig> result = new ArrayList<>(configs.size());
for (CxGridStyleConfig config : configs) {
if (!(config instanceof CxGridStyleConfigStringToResource)) {
@@ -367,8 +517,7 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
}
CxGridStyleConfigStringToResource givenConfig = (CxGridStyleConfigStringToResource) config;
- YStringToResourceConfig newConfig = YConverterFactory.eINSTANCE
- .createYStringToResourceConfig();
+ YStringToResourceConfig newConfig = YConverterFactory.eINSTANCE.createYStringToResourceConfig();
newConfig.setResourceThemePath(givenConfig.getResourceThemePath());
newConfig.setValue(givenConfig.getValue());
newConfig.setCompare(toGridCompare(givenConfig.getCompare()));
@@ -380,8 +529,7 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
protected Pair createBadRenderer() {
Pair pair = new Pair();
- pair.renderer = CxGridRendererFactory.eINSTANCE
- .createCxGridTextRenderer();
+ pair.renderer = CxGridRendererFactory.eINSTANCE.createCxGridTextRenderer();
return pair;
}
@@ -389,4 +537,36 @@ public class SingleECViewGridFactory implements IECViewGridFactory {
public CxGridRenderer renderer;
public YConverter converter;
}
+
+ protected static class Info {
+ public CxGridGroupedCell cxGridGroup;
+
+ CxGridProperty prop;
+
+ // true, if the column is editable
+ boolean editable;
+
+ // the name of the first bound dto
+ String group;
+
+ // the dot path extended by the domainkey if rawDtoRef is true
+ String fullDotPath;
+
+ // true if nested or rawDtoRef
+ boolean nested;
+
+ // if true, then the prop binds to the domain key
+ boolean domainkey;
+
+ // if true, we need to add the domainkey since the property points to a
+ // raw dto. Eg. person.country -> so we make it to
+ // person.country.isoCode
+ boolean rawDtoRef;
+
+ // the first dtoType in the binding path used for groupings
+ Class<?> firstNestedDtoType;
+
+ // the type of the bound property
+ Class<?> type;
+ }
}
diff --git a/org.eclipse.osbp.infogrid.model.edit/.classpath b/org.eclipse.osbp.infogrid.model.edit/.classpath
index cf36b56..22f3064 100644
--- a/org.eclipse.osbp.infogrid.model.edit/.classpath
+++ b/org.eclipse.osbp.infogrid.model.edit/.classpath
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
+ <classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="src" path="src/"/>
- <classpathentry kind="output" path="target/classes"/>
+ <classpathentry kind="output" path="bin"/>
</classpath>
diff --git a/org.eclipse.osbp.infogrid.model.edit/.project b/org.eclipse.osbp.infogrid.model.edit/.project
index 7174e52..3157b0a 100644
--- a/org.eclipse.osbp.infogrid.model.edit/.project
+++ b/org.eclipse.osbp.infogrid.model.edit/.project
@@ -6,11 +6,6 @@
</projects>
<buildSpec>
<buildCommand>
- <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
@@ -30,20 +25,8 @@
<arguments>
</arguments>
</buildCommand>
- <buildCommand>
- <name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.m2e.core.maven2Builder</name>
- <arguments>
- </arguments>
- </buildCommand>
</buildSpec>
<natures>
- <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
- <nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.babel.editor.rbeNature</nature>
diff --git a/org.eclipse.osbp.infogrid.model.edit/META-INF/MANIFEST.MF b/org.eclipse.osbp.infogrid.model.edit/META-INF/MANIFEST.MF
index 766a1a2..8e79c03 100644
--- a/org.eclipse.osbp.infogrid.model.edit/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.infogrid.model.edit/META-INF/MANIFEST.MF
@@ -4,15 +4,16 @@ Bundle-Name: org.eclipse.osbp.infogrid.model.edit
Bundle-SymbolicName: org.eclipse.osbp.infogrid.model.edit;singleton:=true
Bundle-Version: 0.9.0.qualifier
Bundle-ClassPath: .
-Bundle-Activator: org.eclipse.osbp.infogrid.model.gridsource.provider.CxGridSourceEditPlugin$Implementation
+Bundle-Activator: org.eclipse.osbp.infogrid.model.gridsource.provider.CxGridSourceEditPlugin$Implementation$Activator
Bundle-Vendor: Eclipse OSBP
Bundle-Localization: plugin
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Export-Package: org.eclipse.osbp.infogrid.model.gridsource.provider;version="0.9.0",
org.eclipse.osbp.infogrid.model.gridsource.style.provider;version="0.9.0"
-Require-Bundle: org.eclipse.core.runtime,
+Require-Bundle: org.eclipse.core.runtime;resolution:=optional;x-installation:=greedy,
org.eclipse.osbp.infogrid.model;bundle-version="[0.9.0,0.10.0)";visibility:=reexport,
org.eclipse.emf.edit;visibility:=reexport,
org.eclipse.xtext.common.types;bundle-version="[2.11.0,2.12.0)";visibility:=reexport,
org.eclipse.xtext.common.types.edit;bundle-version="[2.11.0,2.12.0)";visibility:=reexport
+Import-Package: org.osgi.framework
Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.osbp.infogrid.model.edit/plugin.properties b/org.eclipse.osbp.infogrid.model.edit/plugin.properties
index 265967c..3dc5b33 100644
--- a/org.eclipse.osbp.infogrid.model.edit/plugin.properties
+++ b/org.eclipse.osbp.infogrid.model.edit/plugin.properties
@@ -100,3 +100,4 @@ _UI_CxGridPropIndicatorStyle_redEnds_feature = Red Ends
_UI_CxGridSource_tags_feature = Tags
_UI_CxGridSource_selectionEventTopic_feature = Selection Event Topic
_UI_CxGridProperty_editable_feature = Editable
+_UI_CxGridSource_groupNestedTypes_feature = Group Nested Types
diff --git a/org.eclipse.osbp.infogrid.model.edit/src/org/eclipse/osbp/infogrid/model/gridsource/provider/CxGridSourceEditPlugin.java b/org.eclipse.osbp.infogrid.model.edit/src/org/eclipse/osbp/infogrid/model/gridsource/provider/CxGridSourceEditPlugin.java
index bc15b53..55cd06b 100644
--- a/org.eclipse.osbp.infogrid.model.edit/src/org/eclipse/osbp/infogrid/model/gridsource/provider/CxGridSourceEditPlugin.java
+++ b/org.eclipse.osbp.infogrid.model.edit/src/org/eclipse/osbp/infogrid/model/gridsource/provider/CxGridSourceEditPlugin.java
@@ -17,6 +17,7 @@ import org.eclipse.emf.common.EMFPlugin;
import org.eclipse.emf.common.util.ResourceLocator;
import org.eclipse.xtext.common.types.provider.TypesEditPlugin;
+import org.osgi.framework.BundleActivator;
/**
* This is the central singleton for the CxGridSource edit plugin.
@@ -97,6 +98,19 @@ public final class CxGridSourceEditPlugin extends EMFPlugin {
//
plugin = this;
}
+
+ /**
+ * The actual implementation of the purely OSGi-compatible <b>Bundle Activator</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final class Activator extends EMFPlugin.OSGiDelegatingBundleActivator {
+ @Override
+ protected BundleActivator createBundle() {
+ return new Implementation();
+ }
+ }
}
}
diff --git a/org.eclipse.osbp.infogrid.model.edit/src/org/eclipse/osbp/infogrid/model/gridsource/provider/CxGridSourceItemProvider.java b/org.eclipse.osbp.infogrid.model.edit/src/org/eclipse/osbp/infogrid/model/gridsource/provider/CxGridSourceItemProvider.java
index 3e53db1..a903ffb 100644
--- a/org.eclipse.osbp.infogrid.model.edit/src/org/eclipse/osbp/infogrid/model/gridsource/provider/CxGridSourceItemProvider.java
+++ b/org.eclipse.osbp.infogrid.model.edit/src/org/eclipse/osbp/infogrid/model/gridsource/provider/CxGridSourceItemProvider.java
@@ -81,6 +81,7 @@ public class CxGridSourceItemProvider
addKindPropertyDescriptor(object);
addRootTypeFQNPropertyDescriptor(object);
addSelectionEventTopicPropertyDescriptor(object);
+ addGroupNestedTypesPropertyDescriptor(object);
}
return itemPropertyDescriptors;
}
@@ -196,6 +197,28 @@ public class CxGridSourceItemProvider
}
/**
+ * This adds a property descriptor for the Group Nested Types feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addGroupNestedTypesPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_CxGridSource_groupNestedTypes_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_CxGridSource_groupNestedTypes_feature", "_UI_CxGridSource_type"),
+ CxGridSourcePackage.Literals.CX_GRID_SOURCE__GROUP_NESTED_TYPES,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
* This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
* {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
* {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
@@ -270,6 +293,7 @@ public class CxGridSourceItemProvider
case CxGridSourcePackage.CX_GRID_SOURCE__KIND:
case CxGridSourcePackage.CX_GRID_SOURCE__ROOT_TYPE_FQN:
case CxGridSourcePackage.CX_GRID_SOURCE__SELECTION_EVENT_TOPIC:
+ case CxGridSourcePackage.CX_GRID_SOURCE__GROUP_NESTED_TYPES:
fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
return;
case CxGridSourcePackage.CX_GRID_SOURCE__ROOT_TYPE:
diff --git a/org.eclipse.osbp.infogrid.model/model/gridsource.aird b/org.eclipse.osbp.infogrid.model/model/gridsource.aird
new file mode 100644
index 0000000..7185cdd
--- /dev/null
+++ b/org.eclipse.osbp.infogrid.model/model/gridsource.aird
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<viewpoint:DAnalysis xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xmi:id="_yr1HMCmJEeel844VWZXc6w" version="11.1.0.201608251200"/>
diff --git a/org.eclipse.osbp.infogrid.model/model/gridsource.ecore b/org.eclipse.osbp.infogrid.model/model/gridsource.ecore
index cb02d21..f50a7e6 100644
--- a/org.eclipse.osbp.infogrid.model/model/gridsource.ecore
+++ b/org.eclipse.osbp.infogrid.model/model/gridsource.ecore
@@ -15,6 +15,8 @@
<eStructuralFeatures xsi:type="ecore:EReference" name="inputs" upperBound="-1"
eType="#//CxGridSourceInput" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="selectionEventTopic" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="groupNestedTypes" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ defaultValueLiteral="false"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="CxGridSourceInput">
<eStructuralFeatures xsi:type="ecore:EReference" name="inputType" eType="ecore:EClass ../../org.eclipse.xtext.common.types/model/JavaVMTypes.ecore#//JvmTypeReference"
diff --git a/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/CxGridSource.java b/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/CxGridSource.java
index 0547e46..f6e600b 100644
--- a/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/CxGridSource.java
+++ b/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/CxGridSource.java
@@ -35,6 +35,7 @@ import org.eclipse.xtext.common.types.JvmTypeReference;
* <li>{@link org.eclipse.osbp.infogrid.model.gridsource.CxGridSource#getProperties <em>Properties</em>}</li>
* <li>{@link org.eclipse.osbp.infogrid.model.gridsource.CxGridSource#getInputs <em>Inputs</em>}</li>
* <li>{@link org.eclipse.osbp.infogrid.model.gridsource.CxGridSource#getSelectionEventTopic <em>Selection Event Topic</em>}</li>
+ * <li>{@link org.eclipse.osbp.infogrid.model.gridsource.CxGridSource#isGroupNestedTypes <em>Group Nested Types</em>}</li>
* </ul>
*
* @see org.eclipse.osbp.infogrid.model.gridsource.CxGridSourcePackage#getCxGridSource()
@@ -221,4 +222,31 @@ public interface CxGridSource extends EObject {
*/
void setSelectionEventTopic(String value);
+ /**
+ * Returns the value of the '<em><b>Group Nested Types</b></em>' attribute.
+ * The default value is <code>"false"</code>.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Group Nested Types</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Group Nested Types</em>' attribute.
+ * @see #setGroupNestedTypes(boolean)
+ * @see org.eclipse.osbp.infogrid.model.gridsource.CxGridSourcePackage#getCxGridSource_GroupNestedTypes()
+ * @model default="false"
+ * @generated
+ */
+ boolean isGroupNestedTypes();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.osbp.infogrid.model.gridsource.CxGridSource#isGroupNestedTypes <em>Group Nested Types</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Group Nested Types</em>' attribute.
+ * @see #isGroupNestedTypes()
+ * @generated
+ */
+ void setGroupNestedTypes(boolean value);
+
} // CxGridSource
diff --git a/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/CxGridSourcePackage.java b/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/CxGridSourcePackage.java
index afc12cf..f4af7a2 100644
--- a/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/CxGridSourcePackage.java
+++ b/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/CxGridSourcePackage.java
@@ -148,13 +148,22 @@ public interface CxGridSourcePackage extends EPackage {
int CX_GRID_SOURCE__SELECTION_EVENT_TOPIC = 7;
/**
+ * The feature id for the '<em><b>Group Nested Types</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CX_GRID_SOURCE__GROUP_NESTED_TYPES = 8;
+
+ /**
* The number of structural features of the '<em>Cx Grid Source</em>' class.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
- int CX_GRID_SOURCE_FEATURE_COUNT = 8;
+ int CX_GRID_SOURCE_FEATURE_COUNT = 9;
/**
* The meta object id for the '{@link org.eclipse.osbp.infogrid.model.gridsource.impl.CxGridSourceInputImpl <em>Input</em>}' class.
@@ -486,6 +495,17 @@ public interface CxGridSourcePackage extends EPackage {
EAttribute getCxGridSource_SelectionEventTopic();
/**
+ * Returns the meta object for the attribute '{@link org.eclipse.osbp.infogrid.model.gridsource.CxGridSource#isGroupNestedTypes <em>Group Nested Types</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Group Nested Types</em>'.
+ * @see org.eclipse.osbp.infogrid.model.gridsource.CxGridSource#isGroupNestedTypes()
+ * @see #getCxGridSource()
+ * @generated
+ */
+ EAttribute getCxGridSource_GroupNestedTypes();
+
+ /**
* Returns the meta object for class '{@link org.eclipse.osbp.infogrid.model.gridsource.CxGridSourceInput <em>Input</em>}'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -797,6 +817,14 @@ public interface CxGridSourcePackage extends EPackage {
EAttribute CX_GRID_SOURCE__SELECTION_EVENT_TOPIC = eINSTANCE.getCxGridSource_SelectionEventTopic();
/**
+ * The meta object literal for the '<em><b>Group Nested Types</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute CX_GRID_SOURCE__GROUP_NESTED_TYPES = eINSTANCE.getCxGridSource_GroupNestedTypes();
+
+ /**
* The meta object literal for the '{@link org.eclipse.osbp.infogrid.model.gridsource.impl.CxGridSourceInputImpl <em>Input</em>}' class.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
diff --git a/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/impl/CxGridSourceImpl.java b/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/impl/CxGridSourceImpl.java
index f084c53..1ea8703 100644
--- a/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/impl/CxGridSourceImpl.java
+++ b/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/impl/CxGridSourceImpl.java
@@ -45,6 +45,7 @@ import org.eclipse.osbp.infogrid.model.gridsource.CxGridSourcePackage;
* <li>{@link org.eclipse.osbp.infogrid.model.gridsource.impl.CxGridSourceImpl#getProperties <em>Properties</em>}</li>
* <li>{@link org.eclipse.osbp.infogrid.model.gridsource.impl.CxGridSourceImpl#getInputs <em>Inputs</em>}</li>
* <li>{@link org.eclipse.osbp.infogrid.model.gridsource.impl.CxGridSourceImpl#getSelectionEventTopic <em>Selection Event Topic</em>}</li>
+ * <li>{@link org.eclipse.osbp.infogrid.model.gridsource.impl.CxGridSourceImpl#isGroupNestedTypes <em>Group Nested Types</em>}</li>
* </ul>
*
* @generated
@@ -171,6 +172,26 @@ public class CxGridSourceImpl extends MinimalEObjectImpl.Container implements Cx
protected String selectionEventTopic = SELECTION_EVENT_TOPIC_EDEFAULT;
/**
+ * The default value of the '{@link #isGroupNestedTypes() <em>Group Nested Types</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isGroupNestedTypes()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean GROUP_NESTED_TYPES_EDEFAULT = false;
+
+ /**
+ * The cached value of the '{@link #isGroupNestedTypes() <em>Group Nested Types</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isGroupNestedTypes()
+ * @generated
+ * @ordered
+ */
+ protected boolean groupNestedTypes = GROUP_NESTED_TYPES_EDEFAULT;
+
+ /**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
@@ -357,6 +378,27 @@ public class CxGridSourceImpl extends MinimalEObjectImpl.Container implements Cx
* <!-- end-user-doc -->
* @generated
*/
+ public boolean isGroupNestedTypes() {
+ return groupNestedTypes;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setGroupNestedTypes(boolean newGroupNestedTypes) {
+ boolean oldGroupNestedTypes = groupNestedTypes;
+ groupNestedTypes = newGroupNestedTypes;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CxGridSourcePackage.CX_GRID_SOURCE__GROUP_NESTED_TYPES, oldGroupNestedTypes, groupNestedTypes));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
@Override
public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
switch (featureID) {
@@ -394,6 +436,8 @@ public class CxGridSourceImpl extends MinimalEObjectImpl.Container implements Cx
return getInputs();
case CxGridSourcePackage.CX_GRID_SOURCE__SELECTION_EVENT_TOPIC:
return getSelectionEventTopic();
+ case CxGridSourcePackage.CX_GRID_SOURCE__GROUP_NESTED_TYPES:
+ return isGroupNestedTypes();
}
return super.eGet(featureID, resolve, coreType);
}
@@ -434,6 +478,9 @@ public class CxGridSourceImpl extends MinimalEObjectImpl.Container implements Cx
case CxGridSourcePackage.CX_GRID_SOURCE__SELECTION_EVENT_TOPIC:
setSelectionEventTopic((String)newValue);
return;
+ case CxGridSourcePackage.CX_GRID_SOURCE__GROUP_NESTED_TYPES:
+ setGroupNestedTypes((Boolean)newValue);
+ return;
}
super.eSet(featureID, newValue);
}
@@ -470,6 +517,9 @@ public class CxGridSourceImpl extends MinimalEObjectImpl.Container implements Cx
case CxGridSourcePackage.CX_GRID_SOURCE__SELECTION_EVENT_TOPIC:
setSelectionEventTopic(SELECTION_EVENT_TOPIC_EDEFAULT);
return;
+ case CxGridSourcePackage.CX_GRID_SOURCE__GROUP_NESTED_TYPES:
+ setGroupNestedTypes(GROUP_NESTED_TYPES_EDEFAULT);
+ return;
}
super.eUnset(featureID);
}
@@ -498,6 +548,8 @@ public class CxGridSourceImpl extends MinimalEObjectImpl.Container implements Cx
return inputs != null && !inputs.isEmpty();
case CxGridSourcePackage.CX_GRID_SOURCE__SELECTION_EVENT_TOPIC:
return SELECTION_EVENT_TOPIC_EDEFAULT == null ? selectionEventTopic != null : !SELECTION_EVENT_TOPIC_EDEFAULT.equals(selectionEventTopic);
+ case CxGridSourcePackage.CX_GRID_SOURCE__GROUP_NESTED_TYPES:
+ return groupNestedTypes != GROUP_NESTED_TYPES_EDEFAULT;
}
return super.eIsSet(featureID);
}
@@ -522,6 +574,8 @@ public class CxGridSourceImpl extends MinimalEObjectImpl.Container implements Cx
result.append(rootTypeFQN);
result.append(", selectionEventTopic: ");
result.append(selectionEventTopic);
+ result.append(", groupNestedTypes: ");
+ result.append(groupNestedTypes);
result.append(')');
return result.toString();
}
diff --git a/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/impl/CxGridSourcePackageImpl.java b/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/impl/CxGridSourcePackageImpl.java
index 586ca18..c22af3c 100644
--- a/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/impl/CxGridSourcePackageImpl.java
+++ b/org.eclipse.osbp.infogrid.model/src/org/eclipse/osbp/infogrid/model/gridsource/impl/CxGridSourcePackageImpl.java
@@ -233,6 +233,15 @@ public class CxGridSourcePackageImpl extends EPackageImpl implements CxGridSourc
* <!-- end-user-doc -->
* @generated
*/
+ public EAttribute getCxGridSource_GroupNestedTypes() {
+ return (EAttribute)cxGridSourceEClass.getEStructuralFeatures().get(8);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
public EClass getCxGridSourceInput() {
return cxGridSourceInputEClass;
}
@@ -445,6 +454,7 @@ public class CxGridSourcePackageImpl extends EPackageImpl implements CxGridSourc
createEReference(cxGridSourceEClass, CX_GRID_SOURCE__PROPERTIES);
createEReference(cxGridSourceEClass, CX_GRID_SOURCE__INPUTS);
createEAttribute(cxGridSourceEClass, CX_GRID_SOURCE__SELECTION_EVENT_TOPIC);
+ createEAttribute(cxGridSourceEClass, CX_GRID_SOURCE__GROUP_NESTED_TYPES);
cxGridSourceInputEClass = createEClass(CX_GRID_SOURCE_INPUT);
createEReference(cxGridSourceInputEClass, CX_GRID_SOURCE_INPUT__INPUT_TYPE);
@@ -518,6 +528,7 @@ public class CxGridSourcePackageImpl extends EPackageImpl implements CxGridSourc
initEReference(getCxGridSource_Properties(), this.getCxGridProperty(), null, "properties", null, 0, -1, CxGridSource.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEReference(getCxGridSource_Inputs(), this.getCxGridSourceInput(), null, "inputs", null, 0, -1, CxGridSource.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEAttribute(getCxGridSource_SelectionEventTopic(), ecorePackage.getEString(), "selectionEventTopic", null, 0, 1, CxGridSource.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getCxGridSource_GroupNestedTypes(), ecorePackage.getEBoolean(), "groupNestedTypes", "false", 0, 1, CxGridSource.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEClass(cxGridSourceInputEClass, CxGridSourceInput.class, "CxGridSourceInput", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEReference(getCxGridSourceInput_InputType(), theTypesPackage.getJvmTypeReference(), null, "inputType", null, 0, 1, CxGridSourceInput.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
diff --git a/stuff b/stuff
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/stuff

Back to the top