Source code: org/objectstyle/cayenne/map/Procedure.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 package org.objectstyle.cayenne.map;
57
58 import java.util.ArrayList;
59 import java.util.Iterator;
60 import java.util.List;
61
62 /**
63 * A mapping descriptor for a database stored procedure.
64 *
65 * @author Andrei Adamchik
66 */
67 public class Procedure extends MapObject {
68 protected String catalog;
69 protected String schema;
70 protected boolean returningValue;
71 protected List callParameters = new ArrayList();
72
73 /**
74 * Creates an unnamed procedure object.
75 */
76 public Procedure() {
77 super();
78 }
79
80 /**
81 * Creates a named Procedure object.
82 */
83 public Procedure(String name) {
84 super(name);
85 }
86
87 /**
88 * Returns procedure name including schema, if present.
89 */
90 public String getFullyQualifiedName() {
91 return (schema != null) ? schema + '.' + getName() : getName();
92 }
93
94 /**
95 * @return parent DataMap of this entity.
96 */
97 public DataMap getDataMap() {
98 return (DataMap) getParent();
99 }
100
101 /**
102 * Sets parent DataMap of this entity.
103 */
104 public void setDataMap(DataMap dataMap) {
105 this.setParent(dataMap);
106 }
107
108 public void setCallParameters(List parameters) {
109 clearCallParameters();
110 callParameters.addAll(parameters);
111 }
112
113 /**
114 * Adds new call parameter to the stored procedure. Also sets
115 * <code>param</code>'s parent to be this procedure.
116 */
117 public void addCallParameter(ProcedureParameter param) {
118 if (param.getName() == null) {
119 throw new IllegalArgumentException("Attempt to add unnamed parameter.");
120 }
121
122 if (callParameters.contains(param)) {
123 throw new IllegalArgumentException(
124 "Attempt to add the same parameter more than once:" + param);
125 }
126
127 param.setProcedure(this);
128 callParameters.add(param);
129 }
130
131 /** Removes a named call parameter. */
132 public void removeCallParameter(String name) {
133 for (int i = 0; i < callParameters.size(); i++) {
134 ProcedureParameter nextParam = (ProcedureParameter) callParameters.get(i);
135 if (name.equals(nextParam.getName())) {
136 callParameters.remove(i);
137 break;
138 }
139 }
140 }
141
142 public void clearCallParameters() {
143 callParameters.clear();
144 }
145
146 /**
147 * Returns a list of call parameters.
148 *
149 * @return List
150 */
151 public List getCallParameters() {
152 return callParameters;
153 }
154
155 /**
156 * Returns a list of OUT and INOUT call parameters. If procedure has a
157 * return value, it will also be included as a call parameter.
158 */
159 public List getCallOutParameters() {
160 List outParams = new ArrayList(callParameters.size());
161 Iterator it = callParameters.iterator();
162 while (it.hasNext()) {
163 ProcedureParameter param = (ProcedureParameter) it.next();
164 if (param.isOutParam()) {
165 outParams.add(param);
166 }
167 }
168
169 return outParams;
170 }
171
172 /**
173 * Returns parameter describing the return value of the StoredProcedure, or
174 * null if procedure does not support return values. If procedure supports return parameters,
175 * its first parameter is always assumed to be a return result.
176 */
177 public ProcedureParameter getResultParam() {
178 // if procedure returns parameters, this must be the first parameter
179 // otherwise, return null
180 return (returningValue && callParameters.size() > 0)
181 ? (ProcedureParameter) callParameters.get(0)
182 : null;
183 }
184
185 /**
186 * Returns <code>true</code> if a stored procedure returns a value.
187 * The first parameter in a list of parameters will be assumed to be
188 * a descriptor of return value.
189 *
190 * @return boolean
191 */
192 public boolean isReturningValue() {
193 return returningValue;
194 }
195
196 public void setReturningValue(boolean returningValue) {
197 this.returningValue = returningValue;
198 }
199
200 public String getCatalog() {
201 return catalog;
202 }
203
204 public String getSchema() {
205 return schema;
206 }
207
208 /**
209 * Sets stored procedure's catalog.
210 */
211 public void setCatalog(String string) {
212 catalog = string;
213 }
214
215 /**
216 * Sets stored procedure's database schema.
217 */
218 public void setSchema(String string) {
219 schema = string;
220 }
221 }