View Javadoc
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  }