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 }