1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package net.sf.webmancer.db;
23
24 import java.util.Collections;
25 import java.util.HashMap;
26 import java.util.List;
27 import java.util.Map;
28
29 import net.sf.webmancer.util.ContractChecker;
30
31
32
33
34
35 public abstract class AbstractDataSet implements IDataSet, IDatabaseOperationPerformer {
36
37
38
39 private Map<String, IAttribute> attributes;
40
41
42
43
44 public AbstractDataSet() {
45 this.attributes = new HashMap<String, IAttribute>();
46 }
47
48
49
50
51 public IQuery createQuery() {
52 return new Query(this);
53 }
54
55
56
57
58 public Map<String, IAttribute> getAttributes() {
59 assert attributes != null;
60 return Collections.unmodifiableMap(attributes);
61 }
62
63
64
65
66 public void addAttribute(IAttribute attribute) {
67 ContractChecker.mustNotBeNull(attribute, "attribute");
68 ContractChecker.mustNotBeNull(attribute.getId(), "attribute.getId()");
69 assert attributes != null;
70 this.attributes.put(attribute.getId(), attribute);
71 }
72
73
74
75
76 public void setAttributes(List<IAttribute> attributes) {
77 ContractChecker.mustNotBeNull(attributes, "attributes");
78 for (IAttribute attribute : attributes) {
79 this.addAttribute(attribute);
80 }
81 }
82
83
84
85
86 public abstract long performDelete(List<ICondition> conditions);
87
88
89
90
91 public abstract void performInsert(Map<IAttribute, ICell> row);
92
93
94
95
96
97
98
99
100
101
102 public void performInsert(IData data) {
103 ContractChecker.mustNotBeNull(data, "data");
104 for (Map<IAttribute, ICell> row : data.getRows()) {
105 performInsert(row);
106 }
107 }
108
109
110
111
112 public abstract long performQueryCount(List<ICondition> conditions);
113
114
115
116
117 public abstract IData performQueryResult(Map<String, IAttribute> attributes, List<ICondition> conditions, long limit, long offset, IAttribute orderingAttribute, boolean ascending);
118
119
120
121
122 public abstract long performUpdate(Map<IAttribute, ICell> row, List<ICondition> conditions);
123
124 }