1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
/*
Wotonomy: OpenStep design patterns for pure Java applications.
Copyright (C) 2001 Michael Powers
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, see http://www.gnu.org
*/
package net.wotonomy.access;
import net.wotonomy.control.EOClassDescription;
import net.wotonomy.control.EOEditingContext;
import net.wotonomy.control.EOFetchSpecification;
import net.wotonomy.control.EOGlobalID;
import net.wotonomy.control.EOKeyValueCodingAdditions;
import net.wotonomy.foundation.NSArray;
import net.wotonomy.foundation.NSDictionary;
import net.wotonomy.foundation.NSMutableArray;
/**
*
* @author ezamudio@nasoft.com
* @author $Author: cgruber $
* @version $Revision: 894 $
*/
public class EODatabaseChannel {
protected EODatabaseContext _context;
protected EOAdaptorChannel _channel;
protected EOEntity _currEntity;
protected EOEditingContext _currEC;
protected NSArray _attributes;
protected boolean _locking;
protected boolean _refreshing;
public EODatabaseChannel(EODatabaseContext context) {
super();
_context = context;
_channel = _context.adaptorContext().createAdaptorChannel();
}
public EOAdaptorChannel adaptorChannel() {
return _channel;
}
public EODatabaseContext databaseContext() {
return _context;
}
public void cancelFetch() {
_channel.cancelFetch();
}
public Object fetchObject() {
NSDictionary r = _channel.fetchRow();
EOGlobalID gid = _currEntity.globalIDForRow(r);
Object eo = _currEC.objectForGlobalID(gid);
if (eo == null) {
eo = EOClassDescription.classDescriptionForEntityName(_currEntity.name()).createInstanceWithEditingContext(_currEC, gid);
if (eo instanceof EOKeyValueCodingAdditions)
((EOKeyValueCodingAdditions)eo).takeValuesFromDictionary(r);
else
EOKeyValueCodingAdditions.DefaultImplementation.takeValuesFromDictionary(eo, r);
} else {
if (isRefreshingObjects()) {
//TODO: refresh object (how?)
}
}
return eo;
}
public boolean isFetchInProgress() {
return _channel.isFetchInProgress();
}
public void setIsLocking(boolean flag) {
_locking = flag;
}
public boolean isLocking() {
return _locking;
}
public void setIsRefreshingObjects(boolean flag) {
_refreshing = flag;
}
public boolean isRefreshingObjects() {
return _refreshing;
}
public void selectObjectsWithFetchSpecification(EOFetchSpecification fspec, EOEditingContext ec) {
setIsLocking(fspec.locksObjects());
setIsRefreshingObjects(fspec.refreshesRefetchedObjects());
setCurrentEditingContext(ec);
setCurrentEntity(databaseContext().database().entityNamed(fspec.entityName()));
NSMutableArray atts = new NSMutableArray();
atts.addObjectsFromArray(_currEntity.attributes());
adaptorChannel().selectAttributes(atts, fspec, isLocking(), _currEntity);
adaptorChannel().setAttributesToFetch(atts);
_attributes = atts;
}
public void setCurrentEditingContext(EOEditingContext ec) {
_currEC = ec;
}
public void setCurrentEntity(EOEntity entity) {
_currEntity = entity;
}
}
/*
* $Log$
* Revision 1.2 2006/02/16 16:47:14 cgruber
* Move some classes in to "internal" packages and re-work imports, etc.
*
* Also use UnsupportedOperationExceptions where appropriate, instead of WotonomyExceptions.
*
* Revision 1.1 2006/02/16 13:19:57 cgruber
* Check in all sources in eclipse-friendly maven-enabled packages.
*
* Revision 1.2 2003/08/29 21:15:46 chochos
* use EOEntity's globalIDForRow method.
*
* Revision 1.1 2003/08/19 01:54:43 chochos
* The EODatabase layer still needs a lot of work, but it's on its way...
*
*/
|