1 package net.sf.sapjcosupport; 2 3 import java.io.Serializable; 4 import java.util.ArrayList; 5 import java.util.HashMap; 6 import java.util.List; 7 import java.util.Map; 8 9 /** 10 * @author Niki Driessen 11 * @since Apr 21, 2006 - 2:40:21 PM 12 */ 13 public abstract class SapQLSupport extends SapSearchHelp { 14 15 protected abstract Class getPersistentClass(); 16 17 protected abstract Object getPrimaryKey(Object data); 18 19 protected abstract boolean useInputList(); 20 21 protected abstract String getPrimaryKeySapName(); 22 23 public List executeQuery(String sapQL, String parameter, int maxResults, boolean fetchFullData) { 24 return executeQuery(sapQL, new String[]{parameter}, maxResults, fetchFullData); 25 } 26 27 public List executeQuery(String sapQL, int maxResults, boolean fetchFullData) { 28 return executeQuery(sapQL, new String[0], maxResults, fetchFullData); 29 } 30 31 public List executeQuery(String sapQL, String[] parameters, int maxResults, boolean fetchFullData) { 32 SapQuery query = new SapQuery(sapQL, getPersistentClass(), maxResults); 33 query.setParameters(parameters); 34 List tempObjects = query.executeQuery(this); 35 if (tempObjects == null || tempObjects.size() == 0) { 36 return new ArrayList(0); 37 } 38 return fetchFullData(fetchFullData, tempObjects); 39 } 40 41 protected List fetchFullData(boolean fetchFullData, List resultsFromSearchHelp) { 42 if (fetchFullData) { 43 List keys = new ArrayList(resultsFromSearchHelp.size()); 44 for (int i = 0; i < resultsFromSearchHelp.size(); i++) { 45 Object data = resultsFromSearchHelp.get(i); 46 keys.add(getPrimaryKey(data)); 47 } 48 return fetch(keys); 49 } else { 50 return resultsFromSearchHelp; 51 } 52 } 53 54 public List fetch(List primaryKeys) { 55 Object input = generateInputMap(primaryKeys); 56 if (input instanceof Map) { 57 return (List) retrieve(getPersistentClass(), (Map) input); 58 } else { 59 return retrieve(getPersistentClass(), (List) input); 60 } 61 } 62 63 public Object fetch(Object primaryKey) { 64 Object input = generateInputMap((Serializable) primaryKey); 65 if (input instanceof Map) { 66 return (List) retrieve(getPersistentClass(), (Map) input); 67 } else { 68 return retrieve(getPersistentClass(), (List) input); 69 } 70 } 71 72 protected Object generateInputMap(Serializable id) { 73 List list = new ArrayList(); 74 list.add(id); 75 return generateInputMap(list); 76 } 77 78 protected Object generateInputMap(List ids) { 79 if (useInputList()) { 80 Map input = new HashMap(1); 81 input.put(getPrimaryKeySapName(), ids); 82 return input; 83 } else { 84 List results = new ArrayList(ids.size()); 85 for (int i = 0; i < ids.size(); i++) { 86 Object id = ids.get(i); 87 Map input = new HashMap(1); 88 input.put(getPrimaryKeySapName(), id); 89 results.add(input); 90 } 91 return results; 92 } 93 } 94 }