package org.aksw.sparqlify.core.cast; import java.util.Collection; import java.util.List; import org.aksw.sparqlify.core.TypeToken; import org.aksw.sparqlify.core.datatypes.SqlMethodCandidate; import org.aksw.sparqlify.core.datatypes.XMethod; public class SqlMethodCollectionUtils { public SqlMethodCandidate lookupMethod(String sparqlFunctionName, List<TypeToken> argTypes) { return null; } public static SqlMethodCandidate lookupMethod(TypeSystem typeSystem, Collection<XMethod> candidates, List<TypeToken> argTypes) { return null; } } // // private static final Logger logger = LoggerFactory.getLogger(SqlMethodCollectionUtils.class); // // private DirectSuperTypeProvider<String,> directSuperTypeProvider; // // public static Map<XMethod, Integer[]> findMethodCandidates(Collection<XMethod> candidates, String ...typeSignature) // { // Map<XMethod, Integer[]> bestMatches = new HashMap<XMethod, Integer[]>(); // for(XMethod m : candidates) { // // Integer[] d = TypeHierarchyUtils.getDistance(typeSignature, m.getSignature().getParameterTypes().toArray(new XClass[0])); // if(d == null || Arrays.asList(d).contains(null)) { // continue; // } // // // // All matches that are worse than current candidate are removed // // The candidate is only added, if it is not worse than any of the // // other candidates // boolean canBeAdded = true; // for(Iterator<Entry<XMethod, Integer[]>> it = bestMatches.entrySet().iterator(); it.hasNext();) { // Entry<XMethod, Integer[]> entry = it.next(); // // int rel = ClassUtils.getRelation(d, entry.getValue()); // // if(rel == -1) { // it.remove(); // } else if(rel > 0) { // canBeAdded = false; // } // } // // if(canBeAdded) { // bestMatches.put(m, d); // } // } // // return bestMatches; // // } // // //// public SqlMethodCandidate lookupMethod(String sparqlFunctionName, List<TypeToken> argTypes) { //// SparqlFunction fn = sparqlFunctions.get(sparqlFunctionName); //// if(fn == null) { //// return null; //// } //// Collection<XMethod> candidates = fn.getSqlMethods(); //// //// SqlMethodCandidate result = lookupMethod(candidates, argTypes); //// //// return result; //// } // // // public static SqlMethodCandidate lookupMethod(TypeSystem typeSystem, Collection<XMethod> candidates, List<TypeToken> argTypes) { // //Collection<XMethod> candidates = sqlFunctions.get(name); // // List<XClass> resolved = TypeHierarchyUtils.resolve(typeSystem, argTypes); // XClass[] tmp = resolved.toArray(new XClass[0]); // // // Map<XMethod, TypeDistance[]> bestMatches = findMethodCandidates(candidates, coercionSystem, tmp); // // if(bestMatches.size() == 0) { // //throw new RuntimeException("No method found: " + name + " " + argTypes); // //throw new RuntimeException("No method found: " + " " + argTypes); // logger.debug("No method found: " + " " + argTypes); // return null; // } else if(bestMatches.size() > 1) { // throw new RuntimeException("Multiple matches: " + bestMatches); // } // // // Entry<XMethod, TypeDistance[]> entry = bestMatches.entrySet().iterator().next(); // XMethod method = entry.getKey(); // // TypeDistance[] typeDistances = entry.getValue(); // List<XMethod> argCoercions = new ArrayList<XMethod>(typeDistances.length); // for(TypeDistance item : typeDistances) { // argCoercions.add(item.getCoercion()); // } // // // SqlMethodCandidate result = new SqlMethodCandidate(method, argCoercions); // // return result; // } // // public static Map<XMethod, TypeDistance[]> findMethodCandidates(Collection<XMethod> candidates, CoercionSystemOld coercions, XClass ...typeSignature) { // Map<XMethod, TypeDistance[]> bestMatches = new HashMap<XMethod, TypeDistance[]>(); // for(XMethod m : candidates) { // // TypeDistance[] d = TypeHierarchyUtils.getTypeDistance(typeSignature, m.getSignature().getParameterTypes().toArray(new XClass[0]), coercions); // if(d == null || Arrays.asList(d).contains(null)) { // continue; // } // // // // All matches that are worse than current candidate are removed // // The candidate is only added, if it is not worse than any of the // // other candidates // boolean canBeAdded = true; // for(Iterator<Entry<XMethod, TypeDistance[]>> it = bestMatches.entrySet().iterator(); it.hasNext();) { // Entry<XMethod, TypeDistance[]> entry = it.next(); // // int rel = TypeHierarchyUtils.getRelation(d, entry.getValue()); // // if(rel == -1) { // it.remove(); // } else if(rel > 0) { // canBeAdded = false; // } // } // // if(canBeAdded) { // bestMatches.put(m, d); // } // } // // return bestMatches; // // // } //}