catch up with development Signed-off-by: Ralf Mollik <ramollik@compex-commerce.com>
diff --git a/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartDSLJvmModelInferrer.xtend b/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartDSLJvmModelInferrer.xtend index 115d7bb..6bbc6ba 100644 --- a/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartDSLJvmModelInferrer.xtend +++ b/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartDSLJvmModelInferrer.xtend
@@ -25,6 +25,7 @@ import java.util.Set import java.util.stream.Collectors import javax.inject.Inject +import javax.swing.Timer import mondrian.rolap.RolapConnection import org.eclipse.osbp.bpm.api.IBPMEngine import org.eclipse.osbp.bpm.api.IBPMTaskClient @@ -543,6 +544,8 @@ setInitializer([append('''new DatamartDtoMapper()''')]) ] type.members += field + field = definition.toField("clearCacheTimer", _typeReferenceBuilder.typeRef(Timer)) + type.members += field } if (definition.source instanceof DatamartEntity) { field = definition.toField("dateFilterAttributeProperties", @@ -698,6 +701,16 @@ def void toOperations(JvmDeclaredType type, DatamartDefinition definition, DatamartPackage datamart) { var JvmOperation operation + operation = definition.toMethod("getName", _typeReferenceBuilder.typeRef(String)) [ + body = [ + append(''' + return "«definition.name»"; + ''') + ] + ] + operation.visibility = JvmVisibility::PUBLIC + type.members += operation + operation = definition.toMethod("getPrimaryListKeys", _typeReferenceBuilder.typeRef(List, _typeReferenceBuilder.typeRef(Object))) [ parameters += definition.toParameter("columnId", _typeReferenceBuilder.typeRef(String)) @@ -754,11 +767,22 @@ body = [ append(''' «IF definition.source instanceof DatamartCube» - try { - «binderClassName».getPersistenceService().clearCubeCache(«binderClassName».getPersistenceService().getMondrianConnection(getPersistenceUnit(), "«((definition.source as DatamartCube).cubeRef.eContainer as CubePackage).fullyQualifiedName»"), "«(definition.source as DatamartCube).cubeRef.name»"); - } catch (SQLException e) { - log.error("{}", e); - }; + if(clearCacheTimer != null && clearCacheTimer.isRunning()) { + clearCacheTimer.restart(); + } else { + clearCacheTimer = new Timer(50, new ActionListener(){ + @Override + public void actionPerformed(ActionEvent event) { + try { + «binderClassName».getPersistenceService().clearCubeCache(«binderClassName».getPersistenceService().getMondrianConnection(getPersistenceUnit(), "«((definition.source as DatamartCube).cubeRef.eContainer as CubePackage).fullyQualifiedName»"), "«(definition.source as DatamartCube).cubeRef.name»"); + } catch (SQLException e) { + log.error("{}", e); + } + } + }); + clearCacheTimer.setRepeats(false); + clearCacheTimer.start(); + } «ENDIF»''') ] ]) @@ -1974,10 +1998,7 @@ } def createSQLFilter(Expression element, DatamartEntity entity, DatamartAttributeBase attribute) { - var tableName = entity.entityRef.toTableName - if (entity.hasSuperType) { - tableName = entity.entityRef.superType.toTableName - } + var tableName = entity.entityRef.getEntityForAttribute(attribute.attributeRef).toTableName var type = attribute.attributeRef.type var filter = "" if (type instanceof LDataType) { @@ -2701,11 +2722,7 @@ * */ def getAttributeName(DatamartAttributeBase attribute, DatamartEntity entity) { - if (entity !== null) { - return '''«entity.getEntityAlias».«attribute.attributeRef.toColumnName»''' - } else { - return '''«(attribute.attributeRef.eContainer as LEntity).name».«attribute.attributeRef.toColumnName»''' - } + return '''«entity.entityRef.getEntityNameForAttribute(attribute.attributeRef)».«attribute.attributeRef.toColumnName»''' } /** @@ -2978,16 +2995,14 @@ def createSelect(Map<String, Triple<String, Integer, Boolean>> attributes, DatamartDefinition definition, Map<String, DatamartEntity> entityMap) { var selectString = "" if (definition.source instanceof DatamartEntity){ - if (!(definition.source as DatamartEntity).suppressAttributes){ - selectString = attributes.entrySet.sortWith[e1, e2|return (e2.value.second - e1.value.second)].map [ - if(it.value.third) { - "distinct " + it.key + " as \\\"" + it.value.first + "\\\"" - } else { - it.key + " as \\\"" + it.value.first + "\\\"" - } - ].join(",") - selectString = '''«selectString»''' - } + selectString = attributes.entrySet.sortWith[e1, e2|return (e2.value.second - e1.value.second)].map [ + if(it.value.third) { + "distinct " + it.key + " as \\\"" + it.value.first + "\\\"" + } else { + it.key + " as \\\"" + it.value.first + "\\\"" + } + ].join(",") + selectString = '''«selectString»''' } datamartDtoMapper = "new DatamartDtoMapper()" if (definition !== null) { @@ -3140,23 +3155,34 @@ } def aliasedColumnName(DatamartEntity entity, LAttribute attr, String beanPrefix, LAttribute parentBean) { - var name = "" - var entityRef = entity.entityRef - if (entityRef.hasSuperType) { - if (entityRef.superType.allAttributes.contains(attr) || parentBean !== null && entityRef.superType.allAttributes.contains(parentBean)) { - name = entityRef.superType.getName() - } else { - name = entityRef.getName() - } - } else { - name = entityRef.getName() - } + var name = getEntityNameForAttribute(entity.entityRef, attr, parentBean) var alias = name if (entity.eContainer instanceof DatamartNavigation) { alias = '''«alias»_«(entity.eContainer as DatamartNavigation).joinRef.ref.name»''' } return '''«alias.shortenTo30Char».«attr.toColumnName.getBeanName(beanPrefix)»''' } + + protected def String getEntityNameForAttribute(LEntity entityRef, LAttribute attr) { + entityRef.getEntityForAttribute(attr, null).name + } + + protected def String getEntityNameForAttribute(LEntity entityRef, LAttribute attr, LAttribute parentBean) { + entityRef.getEntityForAttribute(attr, parentBean).name + } + + protected def LEntity getEntityForAttribute(LEntity entityRef, LAttribute attr) { + entityRef.getEntityForAttribute(attr, null) + } + + protected def LEntity getEntityForAttribute(LEntity entityRef, LAttribute attr, LAttribute parentBean) { + if (entityRef.hasSuperType) { + if (entityRef.superType.allAttributes.contains(attr) || parentBean !== null && entityRef.superType.allAttributes.contains(parentBean)) { + return entityRef.superType + } + } + entityRef + } def void addAttribute(DatamartEntity datamartEntity, String beanPrefix, DatamartAttribute datamartAttr, boolean aggregated, boolean distinct, String aggregateName, Integer columnWeight, Map<String, Triple<String, Integer, Boolean>> attributes, @@ -3175,19 +3201,10 @@ private def void addAttribute(DatamartEntity datamartEntity, String beanPrefix, LAttribute attr, String attributeName, boolean aggregated, boolean distinct, String aggregateName, Integer columnWeight, Map<String, Triple<String, Integer, Boolean>> attributes, Map<String, LAttribute> typesMap, List<String> groupingList, LAttribute parentBean) { - var entity = datamartEntity.entityRef + var entityRef = datamartEntity.entityRef var key = datamartEntity.aliasedColumnName(attr, beanPrefix, parentBean) var newAttributeName = attributeName.getBeanName(beanPrefix) - var typesAttr = "" - if (entity.hasSuperType) { - if (entity.superType.allAttributes.contains(attr) || parentBean !== null && entity.superType.allAttributes.contains(parentBean)) { - typesAttr = '''«entity.superType.name».«newAttributeName»''' - } else { - typesAttr = '''«entity.name».«newAttributeName»''' - } - } else { - typesAttr = '''«entity.name».«newAttributeName»''' - } + var typesAttr = '''«entityRef.getEntityNameForAttribute(attr, parentBean)».«newAttributeName»''' typesMap.put(typesAttr, attr); if (aggregated) { key = '''«aggregateName»(«key»)''' @@ -3236,16 +3253,19 @@ } join = '''«entity.getEntityAlias».«name»=«parent.getEntityAlias».«parent.entityRef.idAttributeName»''' } else if (navigation instanceof DatamartOwner) { - join = '''«entity.getEntityAlias».«entity.entityRef.idAttributeName»=«parent.getEntityAlias».«name»''' + join = '''«entity.getEntityAlias».«entity.entityRef.idAttributeName»=«parent.entityRef.name».«name»''' } - join = ''' on(«join»)''' + join = ''' on («join»)''' } } def createSupertypeJoin(DatamartEntity entity) { var subTypeAlias = entity.entityRef.name + if (entity.eContainer instanceof DatamartNavigation) { + subTypeAlias = '''«subTypeAlias»_«(entity.eContainer as DatamartNavigation).joinRef.ref.name»''' + } var join = '''«subTypeAlias».«entity.entityRef.idAttributeName»=«entity.entityRef.superType.getEntityAlias(entity)».«entity.entityRef.superType.idAttributeName»''' - join = '''«entity.entityRef.persistenceInfo.schemaName.provideSchemaName»«entity.entityRef.toTableName» «subTypeAlias» on(«join»)''' + join = '''«entity.entityRef.persistenceInfo.schemaName.provideSchemaName»«entity.entityRef.toTableName» «subTypeAlias» on («join»)''' } /**
diff --git a/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartModelGenerator.xtend b/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartModelGenerator.xtend index 2a74d4f..2dc5a42 100644 --- a/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartModelGenerator.xtend +++ b/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartModelGenerator.xtend
@@ -16,6 +16,8 @@ package org.eclipse.osbp.xtext.datamartdsl.jvmmodel import com.vaadin.ui.Notification +import java.awt.event.ActionEvent +import java.awt.event.ActionListener import java.math.BigDecimal import java.sql.Date import java.sql.DriverManager @@ -111,6 +113,8 @@ ,Locale ,ITranslator ,UUIDHist + ,ActionListener + ,ActionEvent ) super.createAppendable(context, importManager, config) }
diff --git a/org.eclipse.osbp.xtext.datamartdsl/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartModelGenerator.java b/org.eclipse.osbp.xtext.datamartdsl/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartModelGenerator.java index b89c375..8fe2a76 100644 --- a/org.eclipse.osbp.xtext.datamartdsl/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartModelGenerator.java +++ b/org.eclipse.osbp.xtext.datamartdsl/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartModelGenerator.java
@@ -14,6 +14,8 @@ package org.eclipse.osbp.xtext.datamartdsl.jvmmodel; import com.vaadin.ui.Notification; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.math.BigDecimal; import java.sql.Date; import java.sql.DriverManager; @@ -73,7 +75,7 @@ TreeAppendable _xblockexpression = null; { this.setBuilder(context.eResource()); - this._basicDslGeneratorUtils.addImportFor(this, importManager, this._typeReferenceBuilder, DriverManager.class, SQLException.class, List.class, DerivedAxis.class, DerivedPosition.class, DerivedMember.class, ResultSet.class, Statement.class, SqlCellSet.class, Axis.class, IPersistenceService.class, ProductConfiguration.class, IDataMart.EType.class, IDualData.class, SimpleDateFormatter.class, DatamartData.class, DatamartFilter.class, ReferenceCardinality.class, ReferencePolicy.class, User.class, HashMap.class, LinkedHashMap.class, IDataMart.class, IDto.class, DatamartDtoMapper.class, BPMTaskSummary.class, Notification.class, BigDecimal.class, Timestamp.class, Date.class, ResourceBundle.class, Locale.class, ITranslator.class, UUIDHist.class); + this._basicDslGeneratorUtils.addImportFor(this, importManager, this._typeReferenceBuilder, DriverManager.class, SQLException.class, List.class, DerivedAxis.class, DerivedPosition.class, DerivedMember.class, ResultSet.class, Statement.class, SqlCellSet.class, Axis.class, IPersistenceService.class, ProductConfiguration.class, IDataMart.EType.class, IDualData.class, SimpleDateFormatter.class, DatamartData.class, DatamartFilter.class, ReferenceCardinality.class, ReferencePolicy.class, User.class, HashMap.class, LinkedHashMap.class, IDataMart.class, IDto.class, DatamartDtoMapper.class, BPMTaskSummary.class, Notification.class, BigDecimal.class, Timestamp.class, Date.class, ResourceBundle.class, Locale.class, ITranslator.class, UUIDHist.class, ActionListener.class, ActionEvent.class); _xblockexpression = super.createAppendable(context, importManager, config); } return _xblockexpression;