package com.mysema.rdfbean.rdb.support;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import com.mysema.query.DefaultQueryMetadata;
import com.mysema.query.JoinExpression;
import com.mysema.query.JoinType;
/**
* @author tiwe
*
*/
public class SortableQueryMetadata extends DefaultQueryMetadata {
private static final long serialVersionUID = 6326236143414219377L;
private static final Pattern SPLIT = Pattern.compile("_");
public SortableQueryMetadata() {
this.noValidate();
}
@Override
public List<JoinExpression> getJoins() {
List<JoinExpression> joins = super.getJoins();
List<JoinExpression> rv = new ArrayList<JoinExpression>(joins.size());
for (JoinExpression join : joins) {
if (join.getType() == JoinType.DEFAULT) {
rv.add(join);
} else {
String[] path = SPLIT.split(join.getTarget().toString());
boolean added = false;
for (int i = rv.size() - 1; i >= 0 && !added; i--) {
String[] joinPath = SPLIT.split(rv.get(i).getTarget().toString());
if (path[0].equals(joinPath[0])) {
rv.add(i + 1, join);
added = true;
}
}
if (!added) {
rv.add(join);
}
}
}
return rv;
}
}