diff options
Diffstat (limited to 'org.eclipse.osbp.xtext.datainterchange/src/org/eclipse/osbp/xtext/datainterchange/jvmmodel/DataDSLJvmModelInferrer.xtend')
-rw-r--r-- | org.eclipse.osbp.xtext.datainterchange/src/org/eclipse/osbp/xtext/datainterchange/jvmmodel/DataDSLJvmModelInferrer.xtend | 459 |
1 files changed, 365 insertions, 94 deletions
diff --git a/org.eclipse.osbp.xtext.datainterchange/src/org/eclipse/osbp/xtext/datainterchange/jvmmodel/DataDSLJvmModelInferrer.xtend b/org.eclipse.osbp.xtext.datainterchange/src/org/eclipse/osbp/xtext/datainterchange/jvmmodel/DataDSLJvmModelInferrer.xtend index e73f2d6..d6c774b 100644 --- a/org.eclipse.osbp.xtext.datainterchange/src/org/eclipse/osbp/xtext/datainterchange/jvmmodel/DataDSLJvmModelInferrer.xtend +++ b/org.eclipse.osbp.xtext.datainterchange/src/org/eclipse/osbp/xtext/datainterchange/jvmmodel/DataDSLJvmModelInferrer.xtend @@ -47,7 +47,6 @@ import org.eclipse.osbp.datainterchange.api.IDataInterchange import org.eclipse.osbp.dsl.entity.xtext.extensions.ModelExtensions import org.eclipse.osbp.dsl.semantic.common.types.LReference import org.eclipse.osbp.dsl.semantic.entity.LEntity -import org.eclipse.osbp.dsl.semantic.entity.LEntityFeature import org.eclipse.osbp.osgi.hybrid.api.AbstractHybridVaaclipseView import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent import org.eclipse.osbp.runtime.common.event.IEventDispatcher @@ -544,6 +543,7 @@ class DataDSLJvmModelInferrer extends AbstractModelInferrer { «dataInterchange.getDefaultVariableName».setDataInterchange(dataInterchange); «dataInterchange.getDefaultVariableName».setEventDispatcher(eventDispatcher); «dataInterchange.getDefaultVariableName».setBlobService(blobService); +««« «IF dataInterchange.hasPostFunction && dataInterchange.postFunction.afterImport»postInterchangeExecution(«dataInterchange.postFunction.doExecuteFunction.fullyQualifiedName»);«ENDIF» «if(direction.equals(Direction.IMPORT.name)){ '''«dataInterchange.getDefaultVariableName».setDeleteFileAfterImport(«dataInterchange.isDeleteFileAfterImport»);''' }» @@ -836,6 +836,11 @@ class DataDSLJvmModelInferrer extends AbstractModelInferrer { } body = ''' «body» + «IF dataInterchange.hasPostFunction && dataInterchange.postFunction.afterImport» + log.info("post interchange function execution started ... >>> «dataInterchange.postFunction.doExecuteFunction.fullyQualifiedName»"); + «dataInterchange.postFunction.doExecuteFunction.fullyQualifiedName»(Paths.get(getFileURL().getPath().substring(1)), getFilter()); + log.info("post interchange function execution done ... >>> «dataInterchange.postFunction.doExecuteFunction.fullyQualifiedName»"); + «ENDIF» if(isDeleteFileAfterImport()){ deleteFile(Paths.get(getFileURL().getPath().substring(1)), "DeleteFileAfterImport -"); // interchange file } @@ -892,7 +897,12 @@ class DataDSLJvmModelInferrer extends AbstractModelInferrer { em.getTransaction().commit(); } «ENDIF» - if (log.isDebugEnabled()) log.debug("export finished"); + log.info("export finished"); + «IF dataInterchange.hasPostFunction && !dataInterchange.postFunction.afterImport» + log.info("post interchange function execution started ... >>> «dataInterchange.postFunction.doExecuteFunction.fullyQualifiedName»"); + «dataInterchange.postFunction.doExecuteFunction.fullyQualifiedName»(Paths.get(getFileURL().getPath().substring(1)), getFilter()); + log.info("post interchange function execution done ... >>> «dataInterchange.postFunction.doExecuteFunction.fullyQualifiedName»"); + «ENDIF» } log.info(getDirection().name()+" of «dataInterchange.name» successfully ended!"); ''' @@ -918,8 +928,14 @@ class DataDSLJvmModelInferrer extends AbstractModelInferrer { e.printStackTrace(new PrintWriter(sw)); log.error(getDirection().name()+" Execution of «dataInterchange.name»: failed due to: {}", sw.toString()); setExecutionFailed(true); - «IF dataInterchange.isDeleteFileAfterImport» + log.info("import failed"); Path filePath = Paths.get(getFileURL().getPath().substring(1)); + «IF dataInterchange.hasPostFunction && dataInterchange.postFunction.afterImport» + log.info("post interchange function execution started ... >>> «dataInterchange.postFunction.doExecuteFunction.fullyQualifiedName»"); + «dataInterchange.postFunction.doExecuteFunction.fullyQualifiedName»(Paths.get(getFileURL().getPath().substring(1)), getFilter()); + log.info("post interchange function execution done ... >>> «dataInterchange.postFunction.doExecuteFunction.fullyQualifiedName»"); + «ENDIF» + «IF dataInterchange.isDeleteFileAfterImport» if(Files.exists(filePath) && getDirection()==WorkerThreadRunnable.Direction.IMPORT) { renameFile(filePath, "FAILEDIMPORT"+ getFormatter().format(new Date(System.currentTimeMillis())) + filePath.getFileName().toString()+ ".LOCKED"); } @@ -1122,12 +1138,24 @@ class DataDSLJvmModelInferrer extends AbstractModelInferrer { def String buildExportFilterWhereClause(DataInterchangeFilter filter, String rootname, boolean actionfilter, boolean log){ var body = "" - exportParamIdx = 0; + var attrFilter = "" + var refFilter = "" if(filter !== null && filter.attrFilter !== null){ - var where = filter.attrFilter.buildSubCondition(rootname, actionfilter, log) - if(where !== null && !where.empty){ - body = '''«where»''' - } + exportParamIdx = 0; + attrFilter = filter.attrFilter.buildSubCondition(rootname, actionfilter, log) + } + if(filter !== null && filter.refFilter !== null){ + exportParamIdx = 0; + refFilter = filter.refFilter.buildSubCondition2(rootname, actionfilter, log) + } + if(attrFilter !== null && !attrFilter.empty && refFilter !== null && !refFilter.empty){ + body = '''«IF log»«attrFilter» and «refFilter»«ELSE»criteriaBuilder.and(«attrFilter» , «refFilter»)«ENDIF»''' + } + if(attrFilter !== null && !attrFilter.empty && (refFilter === null || refFilter.empty)){ + body = attrFilter + } + if(refFilter !== null && !refFilter.empty && (attrFilter === null || attrFilter.empty)){ + body = refFilter } return body } @@ -1135,112 +1163,91 @@ class DataDSLJvmModelInferrer extends AbstractModelInferrer { def String buildSubCondition(AttributeFilter filter, String rootname, boolean actionfilter, boolean log){ // the criteria has to be built for an action filter and each parameter value has to be fetched // from the eclipse context, hence from the parameter list !!! - var part1 = "" - - + var String part1 = null + if(filter !== null && filter !== null && filter.refProperty !== null && filter.operator !== null){ + var type = filter.refProperty.type.toTypeReference.qualifiedName + var defaultOrModelValue = '''«IF filter.value !== null && !filter.value.empty»"«filter.getValue»"«ELSE»null«ENDIF»''' + + var actionFilterCriteriaValue = '''«IF type.equals("java.util.Date")»getFilter().get("param«exportParamIdx»").getExpression(criteriaBuilder)«ELSE»getCriteriaValue(getFilter().get("param«exportParamIdx»").getValue(), «defaultOrModelValue»)«ENDIF»''' + switch(filter.operator){ case ISNOTNULL: part1 = '''«IF log»«filter.getRefProperty.name» isNotNull"«ELSE»«rootname».get("«filter.getRefProperty.name»").isNotNull()«ENDIF»''' case ISNULL: part1 = '''«IF log»«filter.getRefProperty.name» isNull"«ELSE»«rootname».get("«filter.getRefProperty.name»").isNull()«ENDIF»''' case EQUALS: - if(actionfilter){ -// part1 = '''criteriaBuilder.equal(«rootname».get("«filter.getRefProperty.name»"), («filter.refProperty.type.toTypeReference.identifier») getFilter().get("param«exportParamIdx»").getValue())''' - part1 = '''criteriaBuilder.equal(«rootname».get("«filter.getRefProperty.name»"), getFilter().get("param«exportParamIdx»").getValue())''' - exportParamIdx++ - } - else if(log){ -// part1 = '''«filter.refProperty.name» = "+(«filter.refProperty.type.toTypeReference.identifier») getFilter().get("param«exportParamIdx»").getValue()''' - part1 = '''«filter.refProperty.name» = "+getFilter().get("param«exportParamIdx»").getValue()''' - exportParamIdx++ + if(log){ + part1 = '''«filter.refProperty.name»«IF actionfilter» = "+«actionFilterCriteriaValue»«ELSE» = '«filter.value»'«ENDIF»''' + if(actionfilter){exportParamIdx++} } - else if(filter.value !== null && !filter.value.empty){ -// part1 = '''criteriaBuilder.equal(«rootname».get("«filter.refProperty.name»"), "«filter.getValue»")''' - part1 = '''criteriaBuilder.equal(«rootname».get("«filter.refProperty.name»"), "«filter.getValue»")''' + else { + part1 = '''criteriaBuilder.equal(«rootname».get("«filter.getRefProperty.name»"), «IF actionfilter»«actionFilterCriteriaValue»«ELSE»«defaultOrModelValue»«ENDIF»)''' + if(actionfilter){exportParamIdx++} } - else{ part1 = null} case NOTEQUALS: - if(actionfilter){ -// part1 = '''criteriaBuilder.notEqual(«rootname».get("«filter.getRefProperty.name»"), («filter.refProperty.type.toTypeReference.identifier») getFilter().get("param«exportParamIdx»").getValue())''' - part1 = '''criteriaBuilder.notEqual(«rootname».get("«filter.getRefProperty.name»"), getFilter().get("param«exportParamIdx»").getValue())''' - exportParamIdx++ - } - else if(log){ -// part1 = '''«filter.getRefProperty.name» != "+(«filter.refProperty.type.toTypeReference.identifier») getFilter().get("param«exportParamIdx»").getValue()''' - part1 = '''«filter.getRefProperty.name» != "+getFilter().get("param«exportParamIdx»").getValue()''' - exportParamIdx++ + if(log){ + part1 = '''«filter.getRefProperty.name»«IF actionfilter» != "+«actionFilterCriteriaValue»«ELSE» != '«filter.value»'«ENDIF»''' + if(actionfilter){exportParamIdx++} } - else if(filter.getValue !== null && !filter.getValue.empty){ -// part1 = '''criteriaBuilder.notEqual(«rootname».get("«filter.getRefProperty.name»"), "«filter.getValue»")''' - part1 = '''criteriaBuilder.notEqual(«rootname».get("«filter.getRefProperty.name»"), "«filter.getValue»")''' + else{ + part1 = '''criteriaBuilder.notEqual(«rootname».get("«filter.getRefProperty.name»"), «actionFilterCriteriaValue»)''' + if(actionfilter){exportParamIdx++} } - else{ part1 = null} case GREATERTHAN: if(actionfilter){ -// part1 = '''criteriaBuilder.greaterThan(«rootname».get("«filter.getRefProperty.name»"), («filter.refProperty.type.toTypeReference.identifier») getFilter().get("param«exportParamIdx»").getValue())''' - part1 = '''criteriaBuilder.greaterThan(«rootname».get("«filter.getRefProperty.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + part1 = '''criteriaBuilder.greaterThan(«rootname».get("«filter.getRefProperty.name»"), «actionFilterCriteriaValue»)''' exportParamIdx++ } else if(log){ -// part1 = '''«filter.getRefProperty.name» > "+(«filter.refProperty.type.toTypeReference.identifier») getFilter().get("param«exportParamIdx»").getValue()''' - part1 = '''«filter.getRefProperty.name» > "+ getFilter().get("param«exportParamIdx»").getValue()''' + part1 = '''«filter.getRefProperty.name»«IF actionfilter» > "+ «actionFilterCriteriaValue» «ELSE» > '«filter.value»'«ENDIF»''' exportParamIdx++ } else if(filter.getValue !== null && !filter.getValue.empty){ -// part1 = '''criteriaBuilder.greaterThan(«rootname».get("«filter.getRefProperty.name»"), "«filter.getValue»")''' part1 = '''criteriaBuilder.greaterThan(«rootname».get("«filter.getRefProperty.name»"), "«filter.getValue»")''' } else{ part1 = null} case GREATERTHANOREQUALTO: if(actionfilter){ -// part1 = '''criteriaBuilder.greaterThanOrEqualTo(«rootname».get("«filter.getRefProperty.name»"), («filter.refProperty.type.toTypeReference.identifier») getFilter().get("param«exportParamIdx»").getValue())''' - part1 = '''criteriaBuilder.greaterThanOrEqualTo(«rootname».get("«filter.getRefProperty.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + part1 = '''criteriaBuilder.greaterThanOrEqualTo(«rootname».get("«filter.getRefProperty.name»"), «actionFilterCriteriaValue»)''' exportParamIdx++ } else if(log){ -// part1 = '''«filter.getRefProperty.name» >= "+(«filter.refProperty.type.toTypeReference.identifier») getFilter().get("param«exportParamIdx»").getValue()''' - part1 = '''«filter.getRefProperty.name» >= "+getFilter().get("param«exportParamIdx»").getValue()''' + part1 = '''«filter.getRefProperty.name»«IF actionfilter» >= "+ «actionFilterCriteriaValue») «ELSE» >= '«filter.value»'«ENDIF»''' exportParamIdx++ } else if(filter.getValue !== null && !filter.getValue.empty){ -// part1 = '''criteriaBuilder.greaterThanOrEqualTo(«rootname».get("«filter.getRefProperty.name»"), "«filter.getValue»")''' part1 = '''criteriaBuilder.greaterThanOrEqualTo(«rootname».get("«filter.getRefProperty.name»"), "«filter.getValue»")''' } else{ part1 = null} case LESSTHAN: if(actionfilter){ -// part1 = '''criteriaBuilder.lessThan(«rootname».get("«filter.getRefProperty.name»"), («filter.refProperty.type.toTypeReference.identifier») getFilter().get("param«exportParamIdx»").getValue())''' - part1 = '''criteriaBuilder.lessThan(«rootname».get("«filter.getRefProperty.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + part1 = '''criteriaBuilder.lessThan(«rootname».get("«filter.getRefProperty.name»"), «actionFilterCriteriaValue»)''' exportParamIdx++ } else if(log){ -// part1 = '''«filter.getRefProperty.name» < "+(«filter.refProperty.type.toTypeReference.identifier») getFilter().get("param«exportParamIdx»").getValue()''' - part1 = '''«filter.getRefProperty.name» < "+getFilter().get("param«exportParamIdx»").getValue()''' + part1 = '''«filter.getRefProperty.name»«IF actionfilter» < "+ «actionFilterCriteriaValue»«ELSE» < '«filter.value»'«ENDIF»''' exportParamIdx++ } else if(filter.getValue !== null && !filter.getValue.empty){ -// part1 = '''criteriaBuilder.lessThan(«rootname».get("«filter.getRefProperty.name»"), "«filter.getValue»")''' part1 = '''criteriaBuilder.lessThan(«rootname».get("«filter.getRefProperty.name»"), "«filter.getValue»")''' } else{ part1 = null} case LESSTHANOREQUALTO: if(actionfilter){ -// part1 = '''criteriaBuilder.lessThanOrEqualTo(«rootname».get("«filter.getRefProperty.name»"), («filter.refProperty.type.toTypeReference.identifier») getFilter().get("param«exportParamIdx»").getValue())''' - part1 = '''criteriaBuilder.lessThanOrEqualTo(«rootname».get("«filter.getRefProperty.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + part1 = '''criteriaBuilder.lessThanOrEqualTo(«rootname».get("«filter.getRefProperty.name»"), «actionFilterCriteriaValue»)''' exportParamIdx++ } else if(log){ - part1 = '''«filter.getRefProperty.name» <= "+(«filter.refProperty.type.toTypeReference.identifier») getFilter().get("param«exportParamIdx»").getValue()''' + part1 = '''«filter.getRefProperty.name»«IF actionfilter» <= "+«actionFilterCriteriaValue» «ELSE» <= '«filter.value»'«ENDIF»''' exportParamIdx++ } else if(filter.getValue !== null && !filter.getValue.empty){ -// part1 = '''criteriaBuilder.lessThanOrEqualTo(«rootname».get("«filter.getRefProperty.name»"), "«filter.getValue»")''' part1 = '''criteriaBuilder.lessThanOrEqualTo(«rootname».get("«filter.getRefProperty.name»"), "«filter.getValue»")''' } else{ part1 = null} @@ -1250,27 +1257,265 @@ class DataDSLJvmModelInferrer extends AbstractModelInferrer { if(part1 !== null && filter.operator2 !== null && filter.subCondition !== null && filter.subCondition.refProperty !== null ){ switch(filter.getOperator2){ -// case AND: return '''«IF log»«part1» +" and «filter.subCondition.buildSubCondition(rootname, actionfilter, log)»«ELSE»criteriaBuilder.and(«part1» , «filter.subCondition.buildSubCondition(rootname, actionfilter, log)»)«ENDIF»''' -// case OR : return '''«IF log»«part1» +" or«filter.subCondition.buildSubCondition(rootname, actionfilter, log)»«ELSE»criteriaBuilder.or(«filter.subCondition.buildSubCondition(rootname, actionfilter, log)» , «part1»)«ENDIF»''' - case AND: return '''«IF log»«part1» +" and «filter.subCondition.buildSubCondition(rootname, actionfilter, log)»«ELSE»criteriaBuilder.and(«part1» , «filter.subCondition.buildSubCondition(rootname, actionfilter, log)»)«ENDIF»''' - case OR : return '''«IF log»«part1» +" or«filter.subCondition.buildSubCondition(rootname, actionfilter, log)»«ELSE»criteriaBuilder.or(«filter.subCondition.buildSubCondition(rootname, actionfilter, log)» , «part1»)«ENDIF»''' + case AND: return '''«IF log»«part1» +" and"+ «filter.subCondition.buildSubCondition(rootname, actionfilter, log)»«ELSE»criteriaBuilder.and(«part1» , «filter.subCondition.buildSubCondition(rootname, actionfilter, log)»)«ENDIF»''' + case OR : return '''«IF log»«part1» +" or"+«filter.subCondition.buildSubCondition(rootname, actionfilter, log)»«ELSE»criteriaBuilder.or(«filter.subCondition.buildSubCondition(rootname, actionfilter, log)» , «part1»)«ENDIF»''' + default: {return part1 } + } + } + } + return part1 + } + + def String buildSubCondition2(ReferenceFilter filter, String rootname, boolean actionfilter, boolean log){ + // the criteria has to be built for an action filter and each parameter value has to be fetched + // from the eclipse context, hence from the parameter list !!! + var part1 = "" + + if(filter !== null && filter !== null && filter.refEntity !== null && filter.operator !== null){ + switch(filter.operator){ + case ISNOTNULL: part1 = filter.refIsNotNull(log, rootname) + case ISNULL: part1 = filter.refIsNull(log, rootname) + case EQUALS: part1 = filter.refEquals(log, rootname, actionfilter) + case NOTEQUALS: part1 = filter.refNotEquals(log, rootname, actionfilter) + case GREATERTHAN: part1 = filter.refGreaterThan(log, rootname, actionfilter) + case GREATERTHANOREQUALTO: part1 = filter.refGreaterThanOrEquals(log, rootname, actionfilter) + case LESSTHAN: part1 = filter.refLessThan(log, rootname, actionfilter) + case LESSTHANOREQUALTO: part1 = filter.refLessThanOrEquals(log, rootname, actionfilter) + default: { part1 = null } + } + + if(part1 !== null && filter.operator2 !== null && filter.subCondition !== null && filter.subCondition.refEntity !== null ){ + switch(filter.getOperator2){ + case AND: return '''«IF log»«part1» +" and"+ «filter.subCondition.buildSubCondition2(rootname, actionfilter, log)»«ELSE»criteriaBuilder.and(«part1» , «filter.subCondition.buildSubCondition2(rootname, actionfilter, log)»)«ENDIF»''' + case OR : return '''«IF log»«part1» +" or"+«filter.subCondition.buildSubCondition2(rootname, actionfilter, log)»«ELSE»criteriaBuilder.or(«filter.subCondition.buildSubCondition2(rootname, actionfilter, log)» , «part1»)«ENDIF»''' default: {return part1 } } } } - -// //TODO implement the missing peaces here for ref conditions -// if(filter !== null && filter.refFilter !== null && filter.refFilter.refEntity !== null && filter.refFilter.operator !== null){ -// var refFilter = filter.refFilter -// if(refFilter instanceof ReferenceFilterWithOutAttr){ -// -// } -// else if(refFilter instanceof ReferenceFilterWithAttr){ -// -// } -// } return part1 } + + def String refLessThan(ReferenceFilter filter, boolean log, String rootname, boolean actionfilter){ + var result = '''''' + if(actionfilter){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''criteriaBuilder.lessThan(«rootname».get("«filter.refEntity.name».«filter.refProperty.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + } + }else{ + result = '''criteriaBuilder.lessThan(«rootname».get("«filter.refEntity.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + } + exportParamIdx++ + } + else if(log){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''«filter.refEntity.name».«filter.refProperty.name»«IF actionfilter» < "+getFilter().get("param«exportParamIdx»").getValue()«ELSE» < '«filter.value»'«ENDIF»''' + } + }else{ + result = '''«filter.refEntity.name»«IF actionfilter» < "+getFilter().get("param«exportParamIdx»").getValue()«ELSE» < '«filter.value»'«ENDIF»''' + } + exportParamIdx++ + } + else if(filter.getValue !== null && !filter.getValue.empty){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''criteriaBuilder.lessThan(«rootname».get("«filter.refEntity.name».«filter.refProperty.name»"), "«filter.getValue»")''' + } + }else{ + result = '''criteriaBuilder.lessThan(«rootname».get("«filter.refEntity.name»"), "«filter.getValue»")''' + } + } + return result + } + + def String refLessThanOrEquals(ReferenceFilter filter, boolean log, String rootname, boolean actionfilter){ + var result = '''''' + if(actionfilter){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''criteriaBuilder.lessThanOrEqualTo(«rootname».get("«filter.refEntity.name».«filter.refProperty.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + } + }else{ + result = '''criteriaBuilder.lessThanOrEqualTo(«rootname».get("«filter.refEntity.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + } + exportParamIdx++ + } + else if(log){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''«filter.refEntity.name».«filter.refProperty.name»«IF actionfilter» <= "+(«filter.refEntity.type.toTypeReference.identifier») getFilter().get("param«exportParamIdx»").getValue()«ELSE» <= '«filter.value»'«ENDIF»''' + } + }else{ + result = '''«filter.refEntity.name»«IF actionfilter» <= "+(«filter.refEntity.type.toTypeReference.identifier») getFilter().get("param«exportParamIdx»").getValue()«ELSE» <= '«filter.value»'«ENDIF»''' + } + exportParamIdx++ + } + else if(filter.getValue !== null && !filter.getValue.empty){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''criteriaBuilder.lessThanOrEqualTo(«rootname».get("«filter.refEntity.name».«filter.refProperty.name»"), "«filter.getValue»")''' + } + }else{ + result = '''criteriaBuilder.lessThanOrEqualTo(«rootname».get("«filter.refEntity.name»"), "«filter.getValue»")''' + } + } + return result + } + + def String refGreaterThan(ReferenceFilter filter, boolean log, String rootname, boolean actionfilter){ + var result = '''''' + if(actionfilter){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''criteriaBuilder.greaterThan(«rootname».get("«filter.refEntity.name».«filter.refProperty.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + } + }else{ + result = '''criteriaBuilder.greaterThan(«rootname».get("«filter.refEntity.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + } + exportParamIdx++ + } + else if(log){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''«filter.refEntity.name».«filter.refProperty.name»«IF actionfilter» > "+ getFilter().get("param«exportParamIdx»").getValue()«ELSE» > '«filter.value»'«ENDIF»''' + } + }else{ + result = '''«filter.refEntity.name»«IF actionfilter» > "+ getFilter().get("param«exportParamIdx»").getValue()«ELSE» > '«filter.value»'«ENDIF»''' + } + exportParamIdx++ + } + else if(filter.getValue !== null && !filter.getValue.empty){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''criteriaBuilder.greaterThan(«rootname».get("«filter.refEntity.name».«filter.refProperty.name»"), "«filter.getValue»")''' + } + }else{ + result = '''criteriaBuilder.greaterThan(«rootname».get("«filter.refEntity.name»"), "«filter.getValue»")''' + } + } + return result + } + + def String refGreaterThanOrEquals(ReferenceFilter filter, boolean log, String rootname, boolean actionfilter){ + var result = '''''' + if(actionfilter){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''criteriaBuilder.greaterThanOrEqualTo(«rootname».get("«filter.refEntity.name».«filter.refProperty.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + } + }else{ + result = '''criteriaBuilder.greaterThanOrEqualTo(«rootname».get("«filter.refEntity.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + } + exportParamIdx++ + } + else if(log){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''«filter.refEntity.name».«filter.refProperty.name»«IF actionfilter» >= "+getFilter().get("param«exportParamIdx»").getValue()«ELSE» >= '«filter.value»'«ENDIF»''' + } + }else{ + result = '''«filter.refEntity.name»«IF actionfilter» >= "+getFilter().get("param«exportParamIdx»").getValue()«ELSE» >= '«filter.value»'«ENDIF»''' + } + exportParamIdx++ + } + else if(filter.getValue !== null && !filter.getValue.empty){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''criteriaBuilder.greaterThanOrEqualTo(«rootname».get("«filter.refEntity.name».«filter.refProperty.name»"), "«filter.getValue»")''' + } + }else{ + result = '''criteriaBuilder.greaterThanOrEqualTo(«rootname».get("«filter.refEntity.name»"), "«filter.getValue»")''' + } + } + return result + } + + def String refEquals(ReferenceFilter filter, boolean log, String rootname, boolean actionfilter){ + var result = '''''' + if(actionfilter){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''criteriaBuilder.equal(«rootname».get("«filter.refEntity.name».«filter.refProperty.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + } + }else{ + result = '''criteriaBuilder.equal(«rootname».get("«filter.refEntity.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + } + exportParamIdx++ + } + else if(log){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''«filter.refEntity.name».«filter.refProperty.name»«IF actionfilter» = "+getFilter().get("param«exportParamIdx»").getValue()«ELSE» = '«filter.value»'«ENDIF»''' + } + }else{ + result = '''«filter.refEntity.name»«IF actionfilter» = "+getFilter().get("param«exportParamIdx»").getValue()«ELSE» = '«filter.value»'«ENDIF»''' + } + exportParamIdx++ + } + else if(filter.value !== null && !filter.value.empty){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''criteriaBuilder.equal(«rootname».get("«filter.refEntity.name».«filter.refProperty.name»"), "«filter.getValue»")''' + } + }else{ + result = '''criteriaBuilder.equal(«rootname».get("«filter.refEntity.name»"), "«filter.getValue»")''' + } + } + return result + } + + def String refNotEquals(ReferenceFilter filter, boolean log, String rootname, boolean actionfilter){ + var result = '''''' + if(actionfilter){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''criteriaBuilder.notEqual(«rootname».get("«filter.refEntity.name».«filter.refProperty.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + } + }else{ + result = '''criteriaBuilder.notEqual(«rootname».get("«filter.refEntity.name»"), getFilter().get("param«exportParamIdx»").getValue())''' + } + exportParamIdx++ + } + else if(log){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''«filter.refEntity.name».«filter.refProperty.name»«IF actionfilter» != "+getFilter().get("param«exportParamIdx»").getValue()«ELSE» != '«filter.value»'«ENDIF»''' + } + }else{ + result = '''«filter.refEntity.name»«IF actionfilter» != "+getFilter().get("param«exportParamIdx»").getValue()«ELSE» != '«filter.value»'«ENDIF»''' + } + exportParamIdx++ + } + else if(filter.getValue !== null && !filter.getValue.empty){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + result = '''criteriaBuilder.notEqual(«rootname».get("«filter.refEntity.name».«filter.refProperty.name»"), "«filter.getValue»")''' + } + }else{ + result = '''criteriaBuilder.notEqual(«rootname».get("«filter.refEntity.name»"), "«filter.getValue»")''' + } + } + return result + } + + def String refIsNull(ReferenceFilter filter, boolean log, String rootname){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + return '''«IF log»«filter.refEntity.name».«filter.refProperty.name» isNull"«ELSE»«rootname».get("«filter.refEntity.name».«filter.refProperty.name»").isNull()«ENDIF»''' + } + } + return '''«IF log»«filter.refEntity.name» isNull"«ELSE»«rootname».get("«filter.refEntity.name»").isNull()«ENDIF»''' + } + + def String refIsNotNull(ReferenceFilter filter, boolean log, String rootname){ + if(filter instanceof ReferenceFilterWithAttr){ + if(filter.refProperty !== null){ + return '''«IF log»«filter.refEntity.name».«filter.refProperty.name» isNotNull"«ELSE»«rootname».get("«filter.refEntity.name».«filter.refProperty.name»").isNotNull()«ENDIF»''' + } + } + return '''«IF log»«filter.refEntity.name» isNotNull"«ELSE»«rootname».get("«filter.refEntity.name»").isNotNull()«ENDIF»''' + } /** * build a graph for all entities in path @@ -1338,39 +1583,49 @@ class DataDSLJvmModelInferrer extends AbstractModelInferrer { def String buildAppropriateFilter(String rootname, DataInterchangeFilter exportfilter, DataInterchangeFilter actionfilter, boolean forActionFilter, boolean forLog){ var result = "" if(exportfilter !== null && actionfilter !== null){ - var part1 = exportfilter.buildExportFilterWhereClause(rootname, forActionFilter, forLog) + var part1 = exportfilter.buildExportFilterWhereClause(rootname, false, forLog) var part2 = actionfilter.buildExportFilterWhereClause(rootname, forActionFilter, forLog) if(forLog){ - result = '''«part1» , «part2»''' + result = '''EXPORTFILTER: «part1» , ACTIONFILTER: «part2»''' } else{ - result = '''criteriaBuilder.and(«part1» «IF !part2.empty», «part2»«ENDIF» )''' + result = '''criteriaBuilder.and(«part1» «IF !part2.empty»,«part2»«ENDIF»)''' } } else if(exportfilter !== null && actionfilter === null){ - result = exportfilter.buildExportFilterWhereClause(rootname, forActionFilter, forLog) + result = '''«exportfilter.buildExportFilterWhereClause(rootname, false, forLog)»''' } else if(exportfilter === null && actionfilter !== null){ - result = actionfilter.buildExportFilterWhereClause(rootname, forActionFilter, forLog) + result = '''«actionfilter.buildExportFilterWhereClause(rootname, forActionFilter, forLog)»''' } if(!forLog){ - return '''.where(«result»)''' + return '''«IF result!== null && !result.empty».where(«result»)«ENDIF»''' } return result } def boolean hasExportFilter(DataInterchange interchange){ - //TODO extend to refAttributes - if(interchange.exportFilter !== null && interchange.exportFilter.attrFilter !== null && interchange.exportFilter.attrFilter.refProperty !== null){ - return true + var filter = if(interchange !== null) interchange.exportFilter else null + if(filter !== null){ + if(filter.attrFilter !== null && filter.attrFilter.refProperty !== null){ + return true + } + else if(filter.refFilter !== null && filter.refFilter.refEntity !== null){ + return true + } } return false } def boolean hasActionFilter(DataInterchange interchange){ - //TODO extend to refAttributes - if(interchange.actionFilter !== null && interchange.actionFilter.attrFilter !== null && interchange.actionFilter.attrFilter.refProperty !== null){ - return true + var filter = if(interchange !== null) interchange.actionFilter else null + if(filter !== null){ + if(filter.attrFilter !== null && filter.attrFilter.refProperty !== null){ + return true + } + else if(filter.refFilter !== null && filter.refFilter.refEntity !== null){ + return true + } } return false } @@ -1397,23 +1652,32 @@ class DataDSLJvmModelInferrer extends AbstractModelInferrer { */ def String exportQuery(String rootname, DataInterchange interchange){ if(interchange.hasActionFilter){ + var where1 = buildAppropriateFilter(rootname, if(interchange.hasExportFilter) interchange.exportFilter else null, interchange.actionFilter, true, false) + var log1 = buildAppropriateFilter(rootname, if(interchange.hasExportFilter) interchange.exportFilter else null, interchange.actionFilter, true, true) + var where2 = buildAppropriateFilter(rootname, if(interchange.hasExportFilter) interchange.exportFilter else null, null, false, false) + var log2 = buildAppropriateFilter(rootname, if(interchange.hasExportFilter) interchange.exportFilter else null, null, false, true) return ''' if(isActionFilterExecutionNeeded()){ - select«buildAppropriateFilter(rootname, if(interchange.hasExportFilter) interchange.exportFilter else null, interchange.actionFilter, true, false)»; - if (log.isDebugEnabled()) log.debug("applied action-filter: «interchange.actionFilter.buildExportFilterWhereClause(rootname, false, true)»+"]"); + «IF where1 !== null && !where1.empty» + select«where1»;«ENDIF» }else{ - select«buildAppropriateFilter(rootname, if(interchange.hasExportFilter) interchange.exportFilter else null, null, true, false)»; - if (log.isDebugEnabled()) log.debug("applied export-filter: «interchange.actionFilter.buildExportFilterWhereClause(rootname, false, true)»+"]"); + «IF where2 !== null && !where2.empty» + select«where2»;«ENDIF» } ''' } - return - '''«IF interchange.hasExportFilter» - select«buildAppropriateFilter(rootname, interchange.exportFilter, null, false, false)»; - if (log.isDebugEnabled()) log.debug("applied export filter: «buildAppropriateFilter(rootname, interchange.exportFilter, null, false, true)»+"]"); - «ENDIF» - ''' + if(interchange.hasExportFilter){ + var where = buildAppropriateFilter(rootname, interchange.exportFilter, null, false, false) + var log = buildAppropriateFilter(rootname, interchange.exportFilter, null, false, true) + if(where !== null && !where.empty){ + return + ''' + select«where»; + ''' + } + } + return '''''' } def determineInterchangeFilter(DataInterchange interchange){ @@ -1463,7 +1727,7 @@ class DataDSLJvmModelInferrer extends AbstractModelInferrer { if(filter !== null && filter.refEntity !== null){ if(filter instanceof ReferenceFilterWithAttr){ if(filter.refProperty !== null) { - results.add(new WorkerThreadRunnable.Parameter(filter.refProperty.name, filter.value)) + results.add(new WorkerThreadRunnable.Parameter(filter.refEntity.name+"."+filter.refProperty.name, filter.value)) } } else if(filter instanceof ReferenceFilterWithOutAttr){ @@ -1485,4 +1749,11 @@ class DataDSLJvmModelInferrer extends AbstractModelInferrer { } return false } + + def boolean hasPostFunction(DataInterchange interchange){ + if(interchange !== null && interchange.postFunction !== null){ + return true + } + return false + } } |