01: /*
02: * Copyright (c) 1998 - 2005 Versant Corporation
03: * All rights reserved. This program and the accompanying materials
04: * are made available under the terms of the Eclipse Public License v1.0
05: * which accompanies this distribution, and is available at
06: * http://www.eclipse.org/legal/epl-v10.html
07: *
08: * Contributors:
09: * Versant Corporation - initial API and implementation
10: */
11: package com.versant.core.jdo.sco.detached;
12:
13: import com.versant.core.jdo.VersantPersistenceManager;
14: import com.versant.core.jdo.VersantStateManager;
15: import com.versant.core.common.VersantFieldMetaData;
16: import com.versant.core.common.Utils;
17: import com.versant.core.jdo.sco.CollectionData;
18: import com.versant.core.jdo.sco.VersantSCOCollectionFactory;
19: import com.versant.core.jdo.sco.VersantSimpleSCO;
20: import com.versant.core.metadata.FieldMetaData;
21: import com.versant.core.common.BindingSupportImpl;
22:
23: import javax.jdo.spi.PersistenceCapable;
24: import java.io.Serializable;
25: import java.util.Collection;
26:
27: public class DetachSCOLinkedListFactory implements
28: VersantSCOCollectionFactory, Serializable {
29:
30: /**
31: * Create a new DetachSCOLinkedList instance .
32: * <p/>
33: * If collectionData contains any OIDs they are first resolved into PC
34: * instances.
35: */
36: public VersantSimpleSCO createSCOCollection(
37: PersistenceCapable owner, VersantPersistenceManager pm,
38: VersantStateManager stateManager, VersantFieldMetaData fmd,
39: CollectionData collectionData) {
40: int n = collectionData.valueCount;
41: Object[] originalData = new Object[n];
42: originalData = Utils.getObjectsById(collectionData.values,
43: collectionData.valueCount, pm, (FieldMetaData) fmd, fmd
44: .isElementTypePC());
45: return new DetachSCOLinkedList(owner, stateManager, fmd,
46: originalData);
47: }
48:
49: /**
50: * Create a new DetachSCOLinkedList instance and fill it with the data in collection.
51: */
52: public VersantSimpleSCO createSCOCollection(
53: PersistenceCapable owner, VersantPersistenceManager pm,
54: VersantStateManager stateManager, VersantFieldMetaData fmd,
55: Collection collection) {
56: return new DetachSCOLinkedList(owner, stateManager, fmd,
57: collection.toArray());
58: }
59:
60: }
|