01: /**********************************************************************
02: Copyright (c) 2005 Andy Jefferson and others. All rights reserved.
03: Licensed under the Apache License, Version 2.0 (the "License");
04: you may not use this file except in compliance with the License.
05: You may obtain a copy of the License at
06:
07: http://www.apache.org/licenses/LICENSE-2.0
08:
09: Unless required by applicable law or agreed to in writing, software
10: distributed under the License is distributed on an "AS IS" BASIS,
11: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12: See the License for the specific language governing permissions and
13: limitations under the License.
14:
15:
16: Contributors:
17: ...
18: **********************************************************************/package org.jpox.state;
19:
20: import java.util.HashMap;
21: import java.util.Map;
22:
23: import org.jpox.api.ApiAdapter;
24: import org.jpox.util.StringUtils;
25:
26: /**
27: * Holder for the detachment state control for the detachment process.
28: *
29: * @version $Revision: 1.3 $
30: */
31: public class DetachState extends FetchPlanState {
32: /** a map for the current execution of detachCopy with detached objects keyed by the object id **/
33: private Map detachedObjectById = new HashMap();
34:
35: /** Adapter for the API being used. */
36: private ApiAdapter api;
37:
38: /**
39: * Constructor.
40: * @param api The API adapter
41: */
42: public DetachState(ApiAdapter api) {
43: this .api = api;
44: }
45:
46: /**
47: * Set to the current state a detached copy object
48: * @param detachedPC the Detached persistable object
49: * @param id The id to key against. If this is null, we treat as embedded
50: */
51: public void setDetachedCopyObject(Object detachedPC, Object id) {
52: if (id == null) {
53: // embedded element (NO ids)
54: detachedObjectById.put(StringUtils
55: .toJVMIDString(detachedPC), detachedPC);
56: } else {
57: detachedObjectById.put(id, detachedPC);
58: }
59: }
60:
61: /**
62: * Set to the current state a detached copy object
63: * @param pc the PersistenceCapable of the object searched
64: * @return the Detached PC
65: */
66: public Object getDetachedCopyObject(Object pc) {
67: Object id = api.getIdForObject(pc);
68: if (id == null) {
69: // embedded element (NO ids)
70: return detachedObjectById
71: .get(StringUtils.toJVMIDString(pc));
72: } else {
73: return detachedObjectById.get(id);
74: }
75: }
76: }
|