Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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 }