Set fields = filter.getFields();
Properties props = new Properties();
Iterator fieldIterator = fields.iterator();
while(fieldIterator.hasNext()) {
String fieldName = (String)fieldIterator.next();
IModelField filed = null;
Iterator subEntityFields = subEntity.getAllFields().iterator();
while(subEntityFields.hasNext()) {
filed = (IModelField)subEntityFields.next();
if(((String)filed.getQueryName().getFirst()).endsWith("." + fieldName)) break;
}
String entityAlias = (String)entityAliases.get(entityUniqueName);
props.put(fieldName, entityAlias + "." + filed.getQueryName());
}
String filterCondition = null;
try {
filterCondition = StringUtils.replaceParameters(filter.getFilterCondition(), "F", props);
} catch (IOException e) {
e.printStackTrace();
}
if(filterCondition != null) {
if(buffer.toString().length() > 0) {
buffer.append(" and ");
} else {
buffer.append("where ");
}
buffer.append(filterCondition + " ");
}
}
}
}
}
}
// add joins required by views
try {
Map<String, Set<String>> viewToInnerEntitiesMap = new HashMap<String, Set<String>>();
List<ISelectField> selectFields = query.getSelectFields(true);
for(ISelectField selectField : selectFields) {
if(selectField.isDataMartField()){
DataMartSelectField dataMartSelectField = (DataMartSelectField)selectField;
IModelField modelField = getDataSource().getModelStructure().getField(dataMartSelectField.getUniqueName());
List<ModelViewEntity> viewEntities = modelField.getParentViews();
if(viewEntities!=null){
for(ModelViewEntity viewEntity : viewEntities) {
if( !viewToInnerEntitiesMap.containsKey( viewEntity.getUniqueName() ) ) {
viewToInnerEntitiesMap.put(viewEntity.getUniqueName(), new HashSet<String>());
}
Set innerEntities = (Set)viewToInnerEntitiesMap.get( viewEntity.getUniqueName());
innerEntities.add(modelField.getParent().getUniqueName());
}
}
}
}
// per il momento metto le join anche se non ce n'� bisogno
for(String viewName : viewToInnerEntitiesMap.keySet()) {
ModelViewEntity view = (ModelViewEntity)getDataSource().getModelStructure().getEntity( viewName );
List<Join> joins = view.getJoins();
for(Join join : joins) {
IConditionalOperator conditionalOperator = null;
conditionalOperator = (IConditionalOperator)JPQLStatementConditionalOperators.getOperator( CriteriaConstants.EQUALS_TO );
String sourceEntityAlias = (String)entityAliases.get(join.getSourceEntity().getUniqueName());
if(sourceEntityAlias == null) {
sourceEntityAlias = getNextAlias(entityAliasesMaps);
entityAliases.put(join.getSourceEntity().getUniqueName(), sourceEntityAlias);
}
String destinationEntityAlias = (String)entityAliases.get(join.getDestinationEntity().getUniqueName());
if(destinationEntityAlias == null) {
destinationEntityAlias = getNextAlias(entityAliasesMaps);
entityAliases.put(join.getDestinationEntity().getUniqueName(), destinationEntityAlias);
}
for(int i = 0; i < join.getSourceFileds().size(); i++) {
IModelField sourceField = join.getSourceFileds().get(i);
IModelField destinationField = join.getDestinationFileds().get(i);
String sourceFieldName = (String)sourceField.getQueryName().getFirst();
String destinationFieldName = (String)destinationField.getQueryName().getFirst();
String leftHandValue = sourceEntityAlias + "." + sourceFieldName;
String rightHandValues = destinationEntityAlias + "." + destinationFieldName;
String filterCondition = conditionalOperator.apply(leftHandValue, new String[]{rightHandValues});