Source code: org/objectstyle/cayenne/access/util/DataNodeCommitHelper.java
1 /* ====================================================================
2 *
3 * The ObjectStyle Group Software License, Version 1.0
4 *
5 * Copyright (c) 2002-2003 The ObjectStyle Group
6 * and individual authors of the software. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. The end-user documentation included with the redistribution, if
21 * any, must include the following acknowlegement:
22 * "This product includes software developed by the
23 * ObjectStyle Group (http://objectstyle.org/)."
24 * Alternately, this acknowlegement may appear in the software itself,
25 * if and wherever such third-party acknowlegements normally appear.
26 *
27 * 4. The names "ObjectStyle Group" and "Cayenne"
28 * must not be used to endorse or promote products derived
29 * from this software without prior written permission. For written
30 * permission, please contact andrus@objectstyle.org.
31 *
32 * 5. Products derived from this software may not be called "ObjectStyle"
33 * nor may "ObjectStyle" appear in their names without prior written
34 * permission of the ObjectStyle Group.
35 *
36 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39 * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47 * SUCH DAMAGE.
48 * ====================================================================
49 *
50 * This software consists of voluntary contributions made by many
51 * individuals on behalf of the ObjectStyle Group. For more
52 * information on the ObjectStyle Group, please see
53 * <http://objectstyle.org/>.
54 *
55 */
56
57 package org.objectstyle.cayenne.access.util;
58
59 import java.util.ArrayList;
60 import java.util.HashMap;
61 import java.util.Iterator;
62 import java.util.List;
63 import java.util.Map;
64
65 import org.objectstyle.cayenne.access.DataNode;
66 import org.objectstyle.cayenne.map.ObjEntity;
67 import org.objectstyle.cayenne.query.Query;
68
69 /**
70 * @author Andrei Adamchik
71 */
72 public class DataNodeCommitHelper {
73 public static final int INSERT = 1;
74 public static final int UPDATE = 2;
75 public static final int DELETE = 3;
76
77 protected DataNode node;
78 protected List objEntitiesForInsert = new ArrayList();
79 protected List objEntitiesForDelete = new ArrayList();
80 protected List objEntitiesForUpdate = new ArrayList();
81 protected Map flattenedInsertQueries = new HashMap();
82 protected Map flattenedDeleteQueries = new HashMap();
83 protected List queries = new ArrayList();
84
85 /**
86 * Finds an existing helper for DataNode, creates a new one if no matching
87 * helper is found.
88 */
89 public static DataNodeCommitHelper getHelperForNode(
90 List helpers,
91 DataNode node) {
92
93 DataNodeCommitHelper helper = null;
94 Iterator it = helpers.iterator();
95 while (it.hasNext()) {
96 DataNodeCommitHelper itHelper = (DataNodeCommitHelper) it.next();
97 if (itHelper.getNode() == node) {
98 helper = itHelper;
99 break;
100 }
101 }
102
103 if (helper == null) {
104 helper = new DataNodeCommitHelper(node);
105 helpers.add(helper);
106 }
107
108 return helper;
109 }
110
111 public DataNodeCommitHelper(DataNode node) {
112 this.node = node;
113 }
114
115
116 public void addToEntityList(ObjEntity ent, int listType) {
117 switch (listType) {
118 case 1 :
119 objEntitiesForInsert.add(ent);
120 break;
121 case 2 :
122 objEntitiesForUpdate.add(ent);
123 break;
124 case 3 :
125 objEntitiesForDelete.add(ent);
126 break;
127 }
128 }
129
130 public void addToQueries(Query q) {
131 queries.add(q);
132 }
133
134 /**
135 * Returns the node.
136 */
137 public DataNode getNode() {
138 return node;
139 }
140
141 /**
142 * Returns the queries.
143 */
144 public List getQueries() {
145 return queries;
146 }
147 /**
148 * Returns the objEntitiesForDelete.
149 * @return List
150 */
151 public List getObjEntitiesForDelete() {
152 return objEntitiesForDelete;
153 }
154
155 /**
156 * Returns the objEntitiesForInsert.
157 * @return List
158 */
159 public List getObjEntitiesForInsert() {
160 return objEntitiesForInsert;
161 }
162
163 /**
164 * Returns the objEntitiesForUpdate.
165 * @return List
166 */
167 public List getObjEntitiesForUpdate() {
168 return objEntitiesForUpdate;
169 }
170
171 public Map getFlattenedDeleteQueries() {
172 return flattenedDeleteQueries;
173 }
174
175 public Map getFlattenedInsertQueries() {
176 return flattenedInsertQueries;
177 }
178 }